我目前正在构建一个随机生成的地形游戏,在游戏中自动创建地形。当生成的进程处于活动状态时,我遇到了延迟,因为我正在使用后处理和创建物理实体运行相当繁重的任务。
然后我开始想到使用并行异步任务来为我做后期处理。但我不知道我将如何做到这一点。我搜索过C ++ std::async
,但我相信这不是我想要的。在我发现的例子中,任务返回了一些东西。我希望任务能够改变主程序中的对象。
这就是我想要的:
// Main program
// Chunks that needs to be processed.
// NOTE! These chunks are already generated, but need post-processing only!
std::vector<Chunk*> unprocessedChunks;
然后我的任务可能看起来像这样,像循环一样运行,不断检查是否有要处理的块。
// Asynced task
if(unprocessedChunks.size() > 0)
{
processChunk(unprocessedChunks.pop());
}
我知道它并不像我写的那么容易,但如果你能把我推向正确的方向,对我来说将是一个巨大的帮助。
在Java中,我可以键入以下内容:
asynced_task = startAsyncTask(new PostProcessTask());
这项任务一直持续到我这样做:
asynced_task.cancel();