boost::asio序列: 计时器

以下两个示例都是使用计时器的例子,超时时长设置为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函数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章