我正在寫一個簡單的函數,當被調用時,它允許執行2個不同的動作(獨佔)。線程之間的選擇:時間到期和用戶輸入
所以有兩個線程。 User_choice
一直等到用戶插入輸入並且Time_choice
等待直到時間到期。
的choice_done
共享VAR說,如果是真的,一個線程已經開始,阻塞(它不會做任何事情!)另一種;而thread_done
說,如果是真的,那個線程(哪個並不重要)已經完成了,所以func()
一直等到一個線程結束。
這是代碼。
func
程序將在程序執行期間被調用更多次。
各種user_choice
線程將永遠在getline
等待!這是個問題嗎?如果在四次該程序後將調用func()
並且用戶不插入任何東西,第五次用戶插入「是」?
請問每個user_choice
線程繼續執行??我如何殺等待線程?還有其他解決方案嗎?
如何在func()
內部等待線程將thread_done
設置爲true?
bool choice_done = false;
bool thread_done = false;
void func(){
boost::thread t1(boost::bind(time_choice()));
boost::thread t2(boost::bind(user_choice()));
//whait untile thread_done == true
do something...
}
// Time choice thread
void time_choice(){
sleep(5);
if(choice_done == false){
printf("Automatic choice\n");
choice_done == true;
do something...
thread_done = true;
}
}
// User choice thread
void user_choice(){
printf("Start emergency procedure?\n");
string tmp;
getline(cin, tmp);
if((tmp.compare("yes") == 0) && (choice_done == false)){
printf("Manual choice\n");
choice_done == true;
do something...
thread_done = true;
}
}
謝謝,但使用該解決方案@gepeppe你這樣做我不解決「函數getline」的問題... – gepeppe
。當'STDIN_FILENO'準備好讀取時,讀取它不會被阻塞(但仍需要使用非阻塞I/O來讀取整行)。 –