在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