01-Timer.1-Using a timer synchronously
第一部分中的教程程序介绍了使用asio工具包所需的基本概念。在深入复杂的网络编程世界之前,这些教程程序通过简单的异步计时器演示了基本技能。
本节的主要内容为:使用同步计时器的基础教程
// 包含必要的头文件
// 所有的asio类都能通过包含头文件 asio.hpp 后使用
#include <asio.hpp>
#include <iostream>
#include <spdlog/spdlog.h>
int main(int argc, char* argv[])
{
spdlog::info("Start wait 5 seconds");
// 所有使用asio的程序都需要至少一个I/O执行上下文,比如io_context或thread_pool对象。
// I/O执行上下文提供了对I/O功能的访问。
asio::io_context io;
// 接下来我们声明一个类型为asio::steady_timer的对象。
// 提供I/O功能(或本例中的定时器功能)的核心asio类总是以执行器或对执行上下文(如io_context)的引用作为其构造函数的第一个参数。
// 构造函数的第二个参数将定时器设置为从现在起5秒后到期。
// 在这个简单的例子中,我们对计时器执行了阻塞等待。也就是说,steady_timer::wait()的调用在计时器到期之前不会返回,
// 计时器是在创建5秒后到期(而不是从等待开始时计算)。
asio::steady_timer t(io, std::chrono::seconds(5));
//定时器始终处于两种状态之一:“已过期”或“未过期”。如果在已过期的定时器上调用 steady_timer::wait() 函数,它将立即返回。
t.wait();
//最后我们打印出必不可少的"Hello, world!"消息,用于显示计时器已到期。
spdlog::info("Hello, world!");
return 0;
}