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


要在5秒内使计时器到期,
这两者有什么实际区别吗?
对于这种情况,是否有人优先考虑(性能,资源等)?

[选项1] deadline_timer

boost::asio::deadline_timer timer(io_service);
timer.expires_from_now(boost::posix_time::seconds(5));

[备选方案2] waitable_timersystem_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


11970
2017-10-22 07:00


起源



答案:


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

截至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使用可用的系统功能实现。

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


10
2017-10-22 08:03





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

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


1
2017-10-22 07:20



为了澄清你的答案,你的意思是在不修改系统时钟的情况下没有实际的区别吗? - ALittleDiff
如果我找对你 - 是的。如果系统时钟在您设置的延迟期间没有被修改(在示例中为5秒),实际差异可以忽略不计(正如Anton所说 - 唯一的区别在于它们的实现) - pmpod


答案:


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

截至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使用可用的系统功能实现。

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


10
2017-10-22 08:03





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

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


1
2017-10-22 07:20



为了澄清你的答案,你的意思是在不修改系统时钟的情况下没有实际的区别吗? - ALittleDiff
如果我找对你 - 是的。如果系统时钟在您设置的延迟期间没有被修改(在示例中为5秒),实际差异可以忽略不计(正如Anton所说 - 唯一的区别在于它们的实现) - pmpod