2014-10-22 72 views
11

要在5秒内过期一个定时器,
这两者之间是否有实际区别?
对于这种情况,是否有其他人更喜欢(表现,资源等)?
'deadline_timer`和`waitable_timer`在`boost asio`之间的区别

[选项1] deadline_timer

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

[选项2] waitable_timersystem_timersteady_timer):

​​

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

回答

10

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

由于升压1.56,basic_deadline_timerbasic_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使用可用的系统函数实现。

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

1

有优秀的性反应,以类似的问题在这里:https://stackoverflow.com/a/16364002/3491378

基本上,主要区别是,如果你希望的任何外部更改系统时钟,而应使用steady_timer - deadline_timer延迟将那些受到影响更改

+0

要澄清你的答案,你的意思是在系统时钟不会被修改的情况下没有实际的区别吗? – ALittleDiff 2014-10-22 07:32:28

+0

如果我找到你的话 - 是的。如果在设置的延迟期间系统时钟没有被修改(在本例中为5秒),那么实际的差异可以忽略不计(正如Anton所说 - 唯一的区别将在他们的实现中) – pmpod 2014-10-22 18:37:36

相关问题