boost::asio序列: 计时器

别说谁变了你拦得住时间么 提交于 2020-04-12 17:02:07

以下两个示例都是使用计时器的例子,超时时长设置为5秒

1. 使用计时器同步等待超时

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
  // 如果采用boost旧版本,则: boost::asio::io_service io;
  boost::asio::io_context io;

  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  // 同步等待
  t.wait();

  std::cout << "Hello, world!" << std::endl;

  return 0;
}

2. 使用计时器异步等待超时

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

void print(const boost::system::error_code& /*e*/)
{
  std::cout << "Hello, world!" << std::endl;
}

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

  boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
  t.async_wait(&print);

  io.run();

  return 0;
}

注意对比两个示例: 在同步场景中,并不需要调用boost::asio::io_context 的run(),实际在例子1中,就算调用,run()函数由于不存在等待异步执行的完成handler需要执行,也会马上返回。在示例2中,需要等待print执行之后,run()函数才会返回,最后退出main函数

发布了203 篇原创文章 · 获赞 109 · 访问量 32万+
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!