1

私は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
    }
 }
4

1 に答える 1

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);
}
于 2012-10-19T18:27:51.500 に答える