`boost asio`中`deadline_timer`和`waitable_timer`之间的区别

ALi*_*iff 13 c++ boost timer boost-asio

要在5秒内使计时器到期,
这两者之间是否存在实际差异?
对于这种情况,是否有人优先考虑(性能,资源等)?

[备选方案1] deadline_timer:

boost::asio::deadline_timer timer(io_service);
timer.expires_from_now(boost::posix_time::seconds(5));
Run Code Online (Sandbox Code Playgroud)

[备选方案2] waitable_timer(system_timersteady_timer):

boost::asio::system_timer timer(io_service);
timer.expires_from_now(std::chrono::seconds(5));
Run Code Online (Sandbox Code Playgroud)

PS:请专心比较deadline_timersystem_timer的,而不是system_timersteady_timer.

Ant*_*vin 10

唯一的区别是使用的时钟类型.

作为升压1.56,两者basic_deadline_timerbasic_waitable_timerdetail::deadline_timer_service内.

它如何执行等待没有区别,唯一的区别在于它如何执行时间计算.

在它的wait()方法中,它用于Time_Traits::now()检查是否需要等待更多.对于system_timerstd::chrono::system_clock::now(),deadline_timer它是boost::posix_time::microsec_clock::universal_time()boost::posix_time::second_clock::universal_time()取决于高精度时钟的存在(见time_traits.hpp).

std::chrono::system_clock实现由编译器/标准库供应商提供,而boost::posix_time::*clock由Boost使用可用的系统功能实现.

当然,这些实现可以具有不同的性能和/或精度,这取决于平台和编译器.


小智 6

这里对类似问题有很好的反应:https : //stackoverflow.com/a/16364002/3491378

基本上,主要区别在于,如果您希望系统时钟有任何外部更改,您应该使用 stable_timer -deadline_timer 延迟将受到这些更改的影响