У меня есть этот фрагмент кода для выполнения трех потоков, где второй поток должен прерываться при нажатии клавиши ввода и печатать сообщение о выходе:
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», но не печатает «сообщение о выходе из потока процесса». Может ли кто-нибудь подсказать, в чем может быть проблема, потому что у меня вчера аналогичная программа работала правильно. Заранее спасибо!
cin.get(key_pressed);
в этом случаеcin.ignore();
должно быть достаточно, так как вы не используете ввод. - person dyp   schedule 27.09.2013