在增强线程中读取标志

Reading a flag in a boost thread

本文关键字:读取 标志 线程 增强      更新时间:2023-10-16

我是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
    }
 }
// 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);
}