我是Boost编程的新手。我想要做的是从main()创建一个线程,它将持续运行,直到main()退出。现在,我正在对该线程进行一些操作,当它完成时,它将设置一个布尔标志。 main()将等待设置此标志,当它为'true'时,main()将执行其工作,重置标志,并等待它再次设置。另一个线程将持续运行。
任何人都可以提供一套简单的提升线程指令来实现这一目标吗?
我试图在伪代码中执行此操作
class Call {
public:
bool flag, do_it;
keyboard_callback() {
if('s' pressed) do_it = true;
}
f() { // some callback function
if(do_it == true) flag=true;
}
void func() {
...register callback f()
...register keyboard_callback()
...
while(some condition) { keep running , exit when 'q'}
...
}
};
main()
{
Call obj;
boost::thread th (boost::bind(&Call::func, &obj));
th.detach();
while(true) {
while (obj.flag == false);
...do something
}
}
答案 0 :(得分:0)
// shared variables
boost::mutex mutex;
boost::condition_variable condition;
bool flag = false;
// signal completion
boost::unique_lock<boost::mutex> lock(mutex);
flag = true;
condition.notify_one();
// waiting in main method
boost::unique_lock<boost::mutex> lock(mutex);
while (!flag) {
condition.wait(lock);
}