是否可以在boost :: asio中对条件变量执行异步等待(读取:非阻塞)?如果没有直接支持任何提示实施它将不胜感激.
我可以实现一个计时器,甚至每隔几毫秒启动一次唤醒,但这种方法非常低劣,我发现很难相信条件变量同步没有实现/记录.
解决方法
如果我正确理解了intent,你想在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(); }