Lassen wir das Multithread-Ausführungsmodell für einen Moment hinter uns und lernen etwas ganz Einfaches. Ein Werkzeug, das Sie in fast jeder Anwendung benötigen, die E/A verarbeitet, ist ein Timer. Lassen Sie uns also lernen, wie man sie in Boost.Asio verwendet.
Es stehen vier Timer zur Verfügung:
boost::asio::deadline_timer
boost::asio::high_resolution_timer
boost::asio::steady_timer
boost::asio::system_timer
Sie bieten jedoch alle die gleiche Funktionalität. Der Unterschied zwischen ihnen besteht darin, dass Deadline_timer auf boost::posix_time basiert, während andere Timer auf std::chrono Timer basieren. Daher besteht keine wirkliche Notwendigkeit, sie im Detail zu besprechen, da sie die gleiche Schnittstelle und Art des Verhaltens bieten. Schauen wir uns ein Anwendungsbeispiel von high_resolution_timer an.
#include <boost/asio.hpp>
#include <iostream>
namespace io = boost::asio;
using error_code = boost::system::error_code;
io::io_context io_context;
// 从io_context引用构造计时器
io::high_resolution_timer timer(io_context);
auto now()
{
return std::chrono::high_resolution_clock::now();
}
auto begin = now();
void async_wait()
{
// 设置到期持续时间
timer.expires_after(std::chrono::seconds(1));
// 异步等待到期
timer.async_wait([&] (error_code error)
{