解决方法
如果我正确理解了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(); }