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函數

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