web-dev-qa-db-ja.com

boost :: thread sleep()は何をしますか?

私は現在、ブーストスレッドの小さなラッパークラスに取り組んでいますが、スリープ関数がどのように機能するのか実際にはわかりません。これは私がこれまでに得たものです。

BaseThread::BaseThread(){
    thread = boost::thread();
    bIsActive = true;
}

BaseThread::~BaseThread(){
    join();
}

void BaseThread::join(){
    thread.join();
}

void BaseThread::sleep(uint32 _msecs){
    if(bIsActive)
        boost::this_thread::sleep(boost::posix_time::milliseconds(_msecs));
}

これは私がこれまでに実装した方法ですが、たとえばスレッドラッパーの複数のインスタンスがアクティブな場合、静的this_thread :: sleepメソッドがどのスレッドをスリープさせるかをどのように認識しているかを本当に理解していません。これはそれを実装する正しい方法ですか?

12
user240137

boost :: this_thread :: sleep 現在のスレッドをスリープします。スレッド自体だけがスリープ状態になります。スレッドをスリープ状態にしたい場合は、スレッドにチェックコードを追加するか、割り込みを使用します。

更新:最新の標準ライブラリでc ++ 11コンパイラを使用する場合は、 std :: this_thread :: sleep_for および std :: this_thread::)にアクセスできます。 sleep_until 関数。ただし、標準の中断メカニズムはありません。

17
Klaim

スリープは常に現在のスレッド(メソッドを呼び出すスレッド)に影響します。

2
Benoît