【问题标题】:boost::deadline_timer::async_wait is not asynchronousboost::deadline_timer::async_wait 不是异步的
【发布时间】:2015-01-29 00:30:58
【问题描述】:

我执行一个简单的例子作为测试,我想在 5 秒后执行一个简单的操作。我正在使用带有 async_wait 的 boost::deadline_timer,但 async_wait 不是异步等待...这是代码:

void print(const boost::system::error_code& /*e*/)
{
  std::cout << "Second Message\n";
}

int main()
{
  boost::asio::io_service io;

  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  t.async_wait(print);
  io.run();
  std::cout << "First Message\n";
  return 0;
}

这是输出:

Second Message
First Message

有一个错误,因为计时器必须在后台等待,因此要继续执行下一条指令“cout

预期的行为是打印“第一条消息”,然后打印“第二条消息”


谢谢,我是这样解决的:

    boost::asio::io_service io;
    boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
    t.async_wait(print);
    std::thread thread([&]{io.run();});

【问题讨论】:

标签: c++ asynchronous boost


【解决方案1】:

io.run() 仅在其所有作业完成时才退出。 尝试用不同的超时时间安排两个deadline_times,看看会发生什么。 (或者将 io.run() 放到另一个线程中。)

【讨论】:

    【解决方案2】:

    迈克尔说的。就在昨天我正在写这个示例in chat

    Live On Coliru

    #include <boost/asio.hpp>
    #include <iostream>
    #include <thread>
    
    int main() {
        boost::asio::io_service svc;
        boost::asio::deadline_timer timer(svc, boost::posix_time::seconds(2));
        timer.async_wait([](boost::system::error_code ec) { std::cout << ec.message() << '\n'; });
    
        std::thread th([&] { svc.run(); });
    
        std::this_thread::sleep_for(std::chrono::seconds(1));
        std::cout << "first\n";
        std::this_thread::sleep_for(std::chrono::seconds(2));
        std::cout << "bye\n";
        
        th.join();
    }
    

    输出:

    first
    Success
    bye
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2014-11-15
    • 2014-03-21
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多