我执行一个简单的示例作为测试,我想在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();});

最佳答案

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

关于c++ - boost::deadline_timer::async_wait不是异步的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28205052/

10-17 02:10