У меня есть этот кусок кода для выполнения трех потоков, где второй поток должен быть прерван при нажатии Enter и распечатать сообщение о выходе:
void input_val()
{
// DO STUFF
return;
}
void process_val()
{
// DO STUFF
try{
cout << "waiting for ENTER..." << endl;
boost::this_thread::sleep(boost::posix_time::milliseconds(200));
}
catch(boost::thread_interrupted&){
cout << "exit process thread" << endl;
return;
}
return;
}void output_val()
{
// DO STUFF
}
int main()
{
char key_pressed;
boost::thread input_thread(boost::bind(&input_val));
boost::thread process_thread(boost::bind(&process_val));
boost::thread output_thread(boost::bind(&output_val));
cin.get(key_pressed);
process_thread.interrupt();
input_thread.join();
process_thread.join();
output_thread.join();
return 0;
}
Process_thread прерывается при «ENTER», но не выводит «сообщение о выходе из потока процесса». Кто-нибудь может подсказать, в чем может быть проблема, потому что вчера я запустил похожую программу.
Заранее спасибо!
Поток работает process_val
спит только 200 мс, поэтому, если вы не можете нажать клавишу менее чем через 200 мс после запуска программы, этот поток уже вернулся и попытка / перехват уже не действует. Если вы увеличите время ожидания до нескольких тысяч мс, у вас должно быть время нажать клавишу, пока она ждет.
Других решений пока нет …