Я использую boost и пытаюсь создать базовую thread_group, которая будет выполнять свои задачи и выйти. Вот что мой код выглядит следующим образом:boost thread_group бесконечный цикл
boost::thread_group threads;
void InputThread()
{
int counter = 0;
while(1)
{
cout << "iteration #" << ++counter << " Press Enter to stop" << endl;
try
{
boost::this_thread::sleep(boost::posix_time::milliseconds(500));
}
catch(boost::thread_interrupted&)
{
cout << "Thread is stopped" << endl;
return;
}
}
}
int main()
{
int iterator;
char key_pressed;
boost::thread t[NUM_THREADS];
for(iterator = 0; iterator < NUM_THREADS; iterator++)
{
threads.create_thread(boost::bind(&InputThread)) ;
cout << "iterator is: " << iterator << endl;
// Wait for Enter to be pressed
cin.get(key_pressed);
// Ask thread to stop
t[iterator].interrupt();
}
// Join all threads
threads.join_all();
return 0;
}
Я начал с двумя нитями и падения в бесконечном цикле после того, как обе нити сделаны с их рабочих мест. Что-то вроде ниже:
iterator is: 0
iteration #1 Press Enter to stop
iteration #2 Press Enter to stop
iterator is: 1
iteration #1 Press Enter to stop
iteration #3 Press Enter to stop
iteration #2 Press Enter to stop
iteration #4 Press Enter to stop
iteration #3 Press Enter to stop
iteration #5 Press Enter to stop
iteration #4 Press Enter to stop
iteration #6 Press Enter to stop
iteration #5 Press Enter to stop
iteration #7 Press Enter to stop
^C
Где я иду не так?
Спасибо, что решает проблему. Однако мне нужно лучше понять thread_group. –
@ user2816953 Если вы удовлетворены ответом, пожалуйста, поддержите и/или примите ответ соответственно. –
Я уже принял ответ, но до сих пор не хватает репутации для продвижения. Я только что подписался на два дня назад. Когда я доберусь туда, я верну вам вашу благодарность за ответ, проголосовав :) –