是否可以对 boost::asio 中的条件变量执行异步等待(读取:非阻塞)?如果不直接支持任何有关实现的提示,我们将不胜感激。
我可以实现一个计时器,甚至每隔几毫秒就触发一次唤醒,但这种方法要差得多,我发现很难相信条件变量同步没有实现/记录。
如果我正确理解了意图,那么当某个条件变量发出信号时,您想在 asio 线程池的上下文中启动事件处理程序吗?我认为在处理程序的开头等待条件变量就足够了,并且io_service::post()最终它自己又回到了池子里,是这样的:
#include <iostream>
#include <boost/asio.hpp>
#include <boost/thread.hpp>
boost::asio::io_service io;
boost::mutex mx;
boost::condition_variable cv;
void handler()
{
boost::unique_lock<boost::mutex> lk(mx);
cv.wait(lk);
std::cout << "handler awakened\n";
io.post(handler);
}
void buzzer()
{
for(;;)
{
boost::this_thread::sleep(boost::posix_time::seconds(1));
boost::lock_guard<boost::mutex> lk(mx);
cv.notify_all();
}
}
int main()
{
io.post(handler);
boost::thread bt(buzzer);
io.run();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)