c – 在条件变量上异步等待asio asio

前端之家收集整理的这篇文章主要介绍了c – 在条件变量上异步等待asio asio前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以在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();
}

猜你在找的C&C++相关文章