Параллельное асинхронное задание C ++

0

В настоящее время я создаю случайную игру с рельефом местности, где ландшафт создается автоматически вокруг игрока. Я испытываю отставание, когда сгенерированный процесс активен, так как я выполняю довольно тяжелые задачи с последующей обработкой и созданием физических тел.

Затем я вспомнил, используя параллельную асинхронную задачу, чтобы выполнить пост-обработку для меня. Но я понятия не имею, как я это сделаю. Я искал 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();
  • 0
    Вы спрашиваете, как использовать потоки в C ++ для параллельной обработки? Вот как это звучит.
  • 0
    Да, не асинхронные задачи = использование потоков? Спасибо @ktodisco за редактирование поста.
Показать ещё 2 комментария
Теги:
multithreading

1 ответ

1
Лучший ответ

Похоже, вы хотите использовать шаблон производителя-потребителя, используя потоки, для выполнения последующей обработки.

  • 0
    Да. Но в моем случае мне нужна только одна задача; потребитель. Производитель является актуальным основным потоком. Нужно ли использовать std :: mutex для блокировки при выборе элементов? : O

Ещё вопросы

Сообщество Overcoder
Наверх
Меню