我有一个ChunkManager
有几个(应该是)异步方法的类。这些方法在我的游戏引擎中处理任务,例如在不同的线程上加载地图块(类似于 Minecraft),以免完全停止主线程(它们是冗长的操作)这是其中一种方法:
void ChunkManager::asyncRenderChunks(){
boost::thread loadingThread(&ChunkManager::renderChunks,this);
}
renderChunks 看起来像:
void ChunkManager::renderChunks(){
activeChunksMutex->lock();
for(int z=0; z < CHUNK_MAX; z=z+1)
{
for(int y=0; y < CHUNK_MAX; y=y+1)
{
for(int x=0; x < CHUNK_MAX; x=x+1)
{
activeChunks[x][y][z]->Render(scnMgr);
}
}
}
activeChunksMutex->unlock();
}
这应该有效,对吧?但是,当它运行时它会崩溃。我有一种感觉,这与我在创建线程后对线程所做的事情有关,因为如果我把
加载线程.join();
在上述方法中,它工作正常,但主线程被暂停,因为显然它只是在等待新线程完成,有效地将我带回第一方。有什么建议吗?抱歉,如果这是一个迟钝的问题,我对线程的概念不熟悉。谢谢。
更新(2013 年 4 月 9 日):我找到了这个宝石:http ://threadpool.sourceforge.net/ ..并 解决了我的问题!