Windows事件的Boost等效

Boost Equivalent for Windows Events

本文关键字:等效 Boost 事件 Windows      更新时间:2023-10-16

在windows c++中我可以创建一个事件句柄

Handle h = CreateEvent(…)

我可以设置和重置事件

SetEvent(…)和ResetEvent(…)

最后,我可以使用命令OpenEvent(…)

事件是否有相应的增强?

我认为你需要使用boost::mutex, boost::unique_lock, boost::condition_variablebool来模仿事件。

你实际上可能需要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 Signals2库可能对您有用。最初的Signals库不是线程安全的,但实现了一个信号/插槽框架,与事件的想法相差不远。由于Signals2是线程安全的,您应该能够利用它在线程之间传递事件。

您需要的是boost进程间库中的named_condition变量。与windows事件的主要区别是,你必须与一个命名互斥器一起使用它们。

注意,您可以在单个进程中使用这些boost进程间原语。我假设您需要这些,因为您正在使用OpenEvent(这意味着通过使用名称共享对象)。如果可以避免使用名称,那么可以使用boost线程库中的非命名变体。

boost锁(互斥锁)将做几乎相同的事情。你可以等一下。