我正在写一个简单的函数,当被调用时,它允许执行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来读取整行)。 –