0

他の多くの人と同じように、私も現在、boost::thread の小さなラッパー クラスに取り組んでおり、別のスレッドから呼び出すことができる単純な sleep(int ミリ秒) 関数を作成するという問題に直面しています。boost::thread::sleep() が行っていたのと同じように。この関数は間もなく廃止されるため、boost::this_thread::sleep_for() と sleep_until() という新しいオプションがあります。しかし、それらを使用して目的の動作を実現する方法がわかりません。また、これは多くの人にとって問題のようですが、まだ解決策を見つけることができませんでした.

そのため、Boost::thread が内部で動作する ThreadWrapper クラスがあります。私がやりたいことはこれです:

ThreadWrapper thread(func_foo);
Thread.sleep(100); //tells the underlying boost:thread of my Threadwrapper
                   //to sleep 100ms

助言がありますか?ありがとう!

4

1 に答える 1

0

私には、これはアプリケーション固有のようです...ターゲットスレッドのどこでスリープが発生する必要がありますか? ソケットデータを待っているスレッドがあるとしましょう...それは事実上すでにスリープしています...データが実際に到着したときにもう少しスリープさせたいですか? それとも、データを待つのをやめますか? または、数値を処理しているスレッドがあるかもしれません...作業のブロックの後にスレッドをスリープさせたい場合があります。setToPause(int ms)したがって、メンバー値を設定する単純なクラスメソッドを使用できるように思われますsleeper。次に、ワーカー/ターゲットスレッドが適切なタイミングで値をチェックし、設定されている場合はリセットしてスリープします (または、要件に応じてスリープしてからリセットします) それがあなたの特定の問題(またはそれが何であるか)を解決するかどうかはわかりませんが、スレッドスケジューリングをいじるよりも簡単でなければなりません...

于 2013-08-20T12:06:13.313 に答える