长时间运行的 I/O 操作通常有一个截止日期,它们必须在截止日期前完成。这些截止日期可以表示为绝对时间,但通常是相对于当前时间计算的。
举一个简单的例子,要使用相对时间对计时器执行同步等待操作,可以这样写:
io_context i;
...
deadline_timer t(i);
t.expires_from_now(boost::posix_time::seconds(5));
t.wait();
更常见的是,程序会对定时器执行异步等待操作:
void handler(boost::system::error_code ec) { ... }
...
io_context i;
...
deadline_timer t(i);
t.expires_from_now(boost::posix_time::milliseconds(400));
t.async_wait(handler);
...
i.run();
与计时器关联的截止日期也可以作为相对时间获得:
boost::posix_time::time_duration time_until_expiry
= t.expires_from_now();
或作为组合计时器的绝对时间:
deadline_timer t2(i);
t2.expires_at(t.expires_at() + boost::posix_time::seconds(30));