本教程程序通过展示如何在定时器上执行阻塞等待来介绍 Asio。
我们首先包含必要的头文件。
所有 Asio 类都可以通过简单地包含 “asio.hpp” 头文件来使用。
#include <iostream>
#include <boost/asio.hpp>
所有使用 Asio 的程序都需要至少有一个 I/O 执行上下文,例如 io_context
或 thread_pool
对象。I/O 执行上下文提供对 I/O 功能的访问。我们在主函数的开头声明一个 io_context
类型的对象。
int main()
{
boost::asio::io_context io;
接下来我们声明一个 boost::asio::steady_timer
类型的对象。提供 I/O 功能的核心 Asio 类(或者在本例中提供定时器功能)总是将执行器或执行上下文的引用(例如 io_context
)作为其第一个构造函数参数。构造函数的第二个参数将定时器设置为从现在起 5 秒后过期。
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
在这个简单的例子中,我们在定时器上执行阻塞等待。也就是说,对 steady_timer::wait()
的调用将在定时器过期之前不会返回,也就是在创建后 5 秒(即不是从等待开始时起)。
定时器始终处于两种状态之一:“已过期”或“未过期”。如果在一个已过期的定时器上调用 steady_timer::wait()
函数,它将立即返回。
t.wait();
最后,我们打印必要的 “Hello, world!” 消息,以显示定时器已经过期。
std::cout << "Hello, world!" << std::endl;
return 0;
}
这是完整的代码示例:
#include <iostream>
#include <boost/asio.hpp>
int main()
{
boost::asio::io_context io;
boost::asio::steady_timer t(io, boost::asio::chrono::seconds(5));
t.wait();
std::cout << "Hello, world!" << std::endl;
return 0;
}