ManualResetEventに相当するブーストがあるのでしょうか?基本的に、私はクロスプラットフォームの実装をしたいと思います...または、誰かがBoost :: threadを使用してManualResetEventの機能を模倣するのを助けることができますか?ありがとう人ManualResetEventに相当するBoost?
答えて
mutexと条件変数がある場合、手動リセットイベントを作成するのはかなり簡単です。
リセットイベントが通知されたかどうかを示すフィールドが必要です。フィールドへのアクセスは、ミューテックスによって保護される必要があります。これには、イベントの設定/リセットと、それが通知されているかどうかの確認の両方が含まれます。
あなたのイベントを待っているときに、それが現在通知されていない場合は、シグナルが通知されるまで条件変数を待つことをお勧めします。最後に、イベントを設定するコードで、イベントを待っている人を目覚めるために条件変数に通知する必要があります。
class manual_reset_event
{
public:
manual_reset_event(bool signaled = false)
: signaled_(signaled)
{
}
void set()
{
{
boost::lock_guard<boost::mutex> lock(m_);
signaled_ = true;
}
// Notify all because until the event is manually
// reset, all waiters should be able to see event signalling
cv_.notify_all();
}
void unset()
{
boost::lock_guard<boost::mutex> lock(m_);
signaled_ = false;
}
void wait()
{
boost::lock_guard<boost::mutex> lock(m_);
while (!signaled_)
{
cv_.wait(lock);
}
}
private:
boost::mutex m_;
boost::condition_variable cv_;
bool signaled_;
};
私はあなたが 'boost :: condition_variable_any'を使ってこれを動作させる必要があるかもしれないと思います。参照:http://stackoverflow.com/questions/8758353/whats-the-difference-between-stdcondition-variable-and-stdcondition-variable – Nick
また、condition_variable_any :: waitメソッドにはパラメータとしてmutexを指定する必要がありますが、ロックガードではありません。 – Oliver
うーん、私が取得: エラーC2664 'のボイドブースト:: condition_variable ::待つ(後押し:: unique_lockの
IIRC、ManualResetEvent
複数のスレッドがオブジェクトを待機できるようにするために存在し、オブジェクトが通知されたときに1つのスレッドが同時に呼び起こされるようにします。 「手動リセット」の部分は、スレッドが復帰した後にシステムが自動的にイベントをリセットしないという事実に由来します。あなたはそれを代わりに行います。
これはcondition variablesに非常に類似して聞こえる:
一般的な使用パターンは、あるスレッドがミューテックスをロックした後
condition_variable
又はcondition_variable_any
のインスタンスにwait
を呼び出すことです。待ち状態からスレッドが呼び出されると、適切な条件が真であるかどうかを調べ、そうであれば処理を続行します。条件が真でない場合、スレッドは再びwait
を呼び出して待機を再開します。
私は基本的に、ライターが書き込みをしていないときに読むことができるリーダースレッドを持っている間、常に書き込みをしなければならない書き込みスレッドを持っています。ありがとう – Polaris878
私はあなたのデザインが理にかなっていると言います。 –
- 1. Objective-C/Cocoaに相当するC#ManualResetEvent
- 2. boost :: gregorianジェネレータに相当するC#
- 3. pybind11相当のboost :: python :: extract?
- 4. C++ 11 std相当のBoost has_dereference
- 5. boost :: testのCppUnitプロテクタに相当しますか?
- 6. itertools.teeはBoost :: Rangeに相当しますか?
- 7. ManualResetEventによる並列プログラミング
- 8. INET_NTOAとINET_ATONに相当するPHP相当額
- 9. .NETに相当するjava.awt.color.ColorSpace
- 10. Pythonに相当するPropertyUtilsBean
- 11. PowerThellに相当するSignTool.exe
- 12. カールC#に相当する
- 13. omp_get_thread_numに相当するグランドセントラルディスパッチ
- 14. イメージレンダリングDOMに相当する
- 15. '__builtin_return_address'に相当するMSVC
- 16. grepに相当するstringr
- 17. HTML5コンテキストメニューに相当する
- 18. R ++に相当するC++
- 19. PrintWriterに相当するSystem.setOut()
- 20. jQueryに相当するプロトタイプ
- 21. XDialogに相当するクロスプラットフォーム
- 22. IntelliJに相当するWindowBuilder?
- 23. "Not MyEnum.SomeValue"に相当する#
- 24. Html.Actionに相当するSDK
- 25. C++に相当する。cin.peek()
- 26. Visioに相当する3D
- 27. QFormQuay2に相当するQFormLayout?
- 28. API17に相当するScriptIntrinsicBLAS
- 29. Javaに相当するSystem.Xml.XmlNode.InnerXml
- 30. Jstackに相当するPython?
どのイベント関数をエミュレートしますか? – curiousguy