12

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

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 メソッドがどのスレッドをスリープ状態にするかを実際に理解していません。これはそれを実装する正しい方法ですか?

4

2 に答える 2

17

boost::this_thread::sleepは現在のスレッドをスリープさせます。スリープ状態にできるのはスレッド自体だけです。スレッドをスリープさせたい場合は、スレッドにチェック コードを追加するか、 interrupts を使用します。

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

于 2009-12-29T11:31:31.747 に答える
2

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

于 2009-12-29T11:32:24.570 に答える