2013-09-26 60 views
2

我有这样一段代码执行三个线程,其中第二线程应该得到的紧迫中断输入并打印出消息:升压线不打印退出消息

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”上但不打印“退出进程线程消息”。任何人都可以提出什么问题可能,因为我有一个类似的程序昨天正常运行。 在此先感谢!

+0

适用于我,如果我增加超时到2000毫秒。编译器,平台,版本? – dyp

+0

*备注:*'cin.get(key_pressed);'在这种情况下''cin.ignore();'应该足够了,因为你不使用输入。 – dyp

回答

2

运行process_val的线程只能睡200ms,所以除非在程序启动后按下小于200ms的键,该线程已经返回并且try/catch不再有效。如果您将睡眠时间增加到几千毫秒,则在等待时您应该有时间按下按键。

+0

啊..这很明显!尽管如此,非常感谢回答这样一个愚蠢的问题。我刚刚不注意。 –