Мне нужно распараллелить некоторые задачи в программе на C++ и совершенно новое для параллельного программирования. До сих пор я добился определенного прогресса в интернет-поиске, но сейчас я немного застрял. Я хотел бы повторно использовать некоторые потоки в цикле, но явно не знаю, как делать то, что я пытаюсь сделать.Повторное использование потока в цикле C++
Я получаю данные с двух карт ADC на компьютере (приобретается параллельно), тогда мне нужно выполнить некоторые операции с собранными данными (обрабатываются параллельно) при сборе следующей партии данных. Вот какой-то псевдокод для иллюстрации
//Acquire some data, wait for all the data to be acquired before proceeding
std::thread acq1(AcquireData, boardHandle1, memoryAddress1a);
std::thread acq2(AcquireData, boardHandle2, memoryAddress2a);
acq1.join();
acq2.join();
while(user doesn't interrupt)
{
//Process first batch of data while acquiring new data
std::thread proc1(ProcessData,memoryAddress1a);
std::thread proc2(ProcessData,memoryAddress2a);
acq1(AcquireData, boardHandle1, memoryAddress1b);
acq2(AcquireData, boardHandle2, memoryAddress2b);
acq1.join();
acq2.join();
proc1.join();
proc2.join();
/*Proceed in this manner, alternating which memory address
is written to and being processed until the user interrupts the program.*/
}
Это основная его суть. Следующий запуск цикла будет записывать на «а» адреса памяти при обработке данных «b» и продолжать чередовать (я могу заставить код сделать это, просто вытащил его, чтобы предотвратить загромождение проблемы).
В любом случае проблема (как я уверен, некоторые люди уже могут сказать) заключается в том, что во второй раз, когда я пытаюсь использовать acq1 и acq2, компилятор (VS2012) говорит: «IntelliSense: вызов объекта типа класса без соответствующего оператора() или функций преобразования в тип указателя на функцию ". Точно так же, если я снова ставил std :: thread перед acq1 и acq2, он говорит: «ошибка C2374:« acq1 »: переопределение; множественная инициализация».
Итак, вопрос в том, могу ли я переназначить потоки новой задачи, когда они выполнили свою предыдущую задачу? Я всегда жду, когда предыдущее использование потока закончится, прежде чем вызывать его снова, но я не знаю, как переназначить поток, и поскольку он находится в цикле, я не могу создавать новый поток каждый раз (или если я может, это кажется расточительным и ненужным, но я мог ошибаться).
Заранее спасибо
Спасибо Oncaphillis, между вашим ответом и luk32, я думаю, что понимаю, что произошло с моей синтаксической ошибкой. – notaCSmajor