Windows事件的Boost等效
Boost Equivalent for Windows Events
在windows c++中我可以创建一个事件句柄
Handle h = CreateEvent(…)
我可以设置和重置事件
SetEvent(…)和ResetEvent(…)
最后,我可以使用命令OpenEvent(…)
事件是否有相应的增强?
我认为你需要使用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 Signals2库可能对您有用。最初的Signals库不是线程安全的,但实现了一个信号/插槽框架,与事件的想法相差不远。由于Signals2是线程安全的,您应该能够利用它在线程之间传递事件。
您需要的是boost进程间库中的named_condition变量。与windows事件的主要区别是,你必须与一个命名互斥器一起使用它们。
注意,您可以在单个进程中使用这些boost进程间原语。我假设您需要这些,因为您正在使用OpenEvent(这意味着通过使用名称共享对象)。如果可以避免使用名称,那么可以使用boost线程库中的非命名变体。
boost锁(互斥锁)将做几乎相同的事情。你可以等一下。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 摆脱 TCP 代理中的提升依赖关系. boost::system::error_code等效
- 是由BOOST ::返回的函子,仅使用绑定的参数绑定,等效于不采用参数的函数
- 在 C++11 中是否有等效的 boost::interprocess::null_mutex(例如 std::null
- Qt有与Boost的分配模块等效的东西吗?
- Boost或等效于gsl_ matrix的TR1等
- boost::circular buffer等效于文件
- 在 c# 中是否有等效的 boost::timer::cpu_timer
- Boost 测试框架与 std::cout 的等效性是什么?
- OpenCV-等效于boost矩阵array_type的OpenCV Mat
- 什么是C++11等效于boost::date_time::not_a_date_time
- boost-asio——编写等效的代码
- 其中是C++11中boost::shared_polymorphic_download的std等效值
- php preg_match 在 Boost C++中等效?
- Qt智能指针等效于Boost::shared_ptr
- Windows事件的Boost等效