многопоточность — C ++ Boost Thread_group с Asycron возвращает

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

Мой пример класса:

  // includes...
class MyClass(int id)
{
thread_id = id;
i = id* 5;
b = false;
}

void resetCounter(int j){
i = j * 5;
}
int getId(){
return id;
}
bool getBool(){
return b;
}

void DoWork(){
while( i > 0 ){
boost::this_thread::sleep(boost::posix_time::seconds(i));
i--;
}
b = true;  // DoWork will in the real code be able to return false!
}
private:
bool b;
int i;
int thread_id
};

boost::threadgroup threads;

Пример кода:

  bool exist = false;
for(int i=0;i<4;i++){
// first check if thread id exist (possible)?
// If so don´t create a new thread but reset the counter!
if(exist){
// in current thread call reset "i" (w.resetCounter(i))
}else{
MyClass m(i);
boost::function<void()> thread_func = boost::bind(&MyClass::DoWork, &m);
threads.create_thread(thread_func);
}
}

Я хочу перебрать потоки и иметь возможность проверить, вернул ли DoWork значение true.

Как мне это реализовать?

0

Решение

Прежде всего, с thread_group Вы не можете перебирать объекты потока. Так что если это то, что вы хотите, рассмотрите возможность хранения объектов потока в каком-то другом контейнере.

Кроме того, вы не можете переносить ожидание завершения одного потока, но если вы не возражаете против использования API, специфичного для Windows, вы можете сделать это с помощью WaitForMultipleObjects,

Тем не менее, я бы порекомендовал вам перепроектировать ваше приложение, чтобы избежать подобных уловок.

0

Другие решения

Других решений пока нет …