在Windows的C++我可以創建一個句柄事件升壓等效於Windows事件
手柄H = CreateEvent(...)
然後我就可以設置和重置該事件
SetEvent的(。 ..)和ResetEvent(...)
最後,我可以使用命令OpenEvent(...)
是否有事件升壓equivelent OpenEvents?
在Windows的C++我可以創建一個句柄事件升壓等效於Windows事件
手柄H = CreateEvent(...)
然後我就可以設置和重置該事件
SetEvent的(。 ..)和ResetEvent(...)
最後,我可以使用命令OpenEvent(...)
是否有事件升壓equivelent OpenEvents?
我認爲你需要使用boost::mutex
,boost::unique_lock
,boost::condition_variable
和可能的bool
爲了模仿事件。
實際上您可能需要某種WaitForSingleObject
才能等待事件。可能是這樣的:
void wait_for_user_input()
{
boost::unique_lock<boost::mutex> lock(mut);
while(!data_ready)
{
cond.wait(lock);
}
process_user_input(); // it might be not necessary to hold mutex locked here!!!
// if so just add curly braces like this:
// void wait_for_user_input()
// {
// {
// boost::unique_lock<boost::mutex> lock(mut);
// while(!data_ready) { cond.wait(lock); }
// }
// process_user_input();
// }
}
你需要的是從boost interprocess librarynamed_condition variable。與Windows事件的主要區別在於,您必須將它們與named_mutex結合使用。
請注意,您可以在單個進程中使用這些boost進程間基元。我假設你需要這些,因爲你正在使用OpenEvent(這意味着通過使用名稱來共享對象)。如果您可以避免使用名稱,則可以使用boost thread庫中的非命名變體。
根據作者不需要IPC。除了'name mutexes'外,如果應用程序崩潰不會自動刪除。因此,在添加了命名互斥鎖之後,他或她也必須以某種方式處理這個僞裝。恕我直言,它只是造成不必要的複雜性。 – 2011-04-08 18:25:45
線程安全Boost Signals2庫可能對您有用。最初的信號庫不是線程安全的,但是實現了一個信號/插槽框架,它離事件的想法不遠。由於Signals2是線程安全的,因此您應該能夠使用它來在線程之間傳遞事件。
您是否需要OpenEvent的多進程IPC方面,還是隻需要進程內通信? – Thanatos 2011-04-08 17:53:52
只有在過程中,沒有IPC。 – rossb83 2011-04-08 18:12:03
即使不是嚴格的重複,這個http://stackoverflow.com/questions/1677070/cross-platform-equivalent-to-windows-events問題爲您的問題提供了正確的答案。 – Cray 2012-11-25 22:15:47