C ++并行异步任务

时间:2014-06-11 13:34:19

标签: c++ multithreading

我目前正在构建一个随机生成的地形游戏,在游戏中自动创建地形。当生成的进程处于活动状态时,我遇到了延迟,因为我正在使用后处理和创建物理实体运行相当繁重的任务。

然后我开始想到使用并行异步任务来为我做后期处理。但我不知道我将如何做到这一点。我搜索过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();

1 个答案:

答案 0 :(得分:0)

听起来您想使用线程进行producer-consumer模式进行后处理工作。