要在5秒内使计时器到期,
这两者有什么实际区别吗?
对于这种情况,是否有人优先考虑(性能,资源等)?
[选项1] deadline_timer
:
boost::asio::deadline_timer timer(io_service);
timer.expires_from_now(boost::posix_time::seconds(5));
[备选方案2] waitable_timer
(system_timer
要么 steady_timer
):
boost::asio::system_timer timer(io_service);
timer.expires_from_now(std::chrono::seconds(5));
PS:请专注于比较 deadline_timer
与 system_timer
, 而不是 system_timer
与 steady_timer
。
唯一的区别是使用的时钟类型。
截至Boost 1.56,两者都有 basic_deadline_timer
和 basic_waitable_timer
使用 detail::deadline_timer_service
内。
它如何执行等待没有区别,唯一的区别在于它如何执行时间计算。
在其中 wait()
它使用的方法 Time_Traits::now()
检查是否需要等待更多。对于 system_timer
它的 std::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使用可用的系统功能实现。
当然,这些实现可能具有不同的性能和/或精度,具体取决于平台和编译器。
这里对类似问题有很好的回应: https://stackoverflow.com/a/16364002/3491378
基本上,主要区别在于,如果您希望对系统时钟进行任何外部更改,则应该使用steady_timer - deadline_timer延迟将受到这些更改的影响
唯一的区别是使用的时钟类型。
截至Boost 1.56,两者都有 basic_deadline_timer
和 basic_waitable_timer
使用 detail::deadline_timer_service
内。
它如何执行等待没有区别,唯一的区别在于它如何执行时间计算。
在其中 wait()
它使用的方法 Time_Traits::now()
检查是否需要等待更多。对于 system_timer
它的 std::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使用可用的系统功能实现。
当然,这些实现可能具有不同的性能和/或精度,具体取决于平台和编译器。
这里对类似问题有很好的回应: https://stackoverflow.com/a/16364002/3491378
基本上,主要区别在于,如果您希望对系统时钟进行任何外部更改,则应该使用steady_timer - deadline_timer延迟将受到这些更改的影响