有没有人遇到deadline_timer在10毫秒后不断调用下一个回调函数?是预期的吗?
操作系统是centos 6,增强版是1.54。
e.g。
Aug 14 16:36:01.697
Aug 14 16:36:02.706
Aug 14 16:36:03.716
Aug 14 16:36:04.726
Aug 14 16:36:05.736
Aug 14 16:36:06.746
Aug 14 16:36:07.756
Aug 14 16:36:08.766
Aug 14 16:36:09.776
Aug 14 16:36:10.786
Aug 14 16:36:11.796
Aug 14 16:36:12.806
Aug 14 16:36:13.816
Aug 14 16:36:14.826
Aug 14 16:36:15.836
Aug 14 16:36:16.846
Aug 14 16:36:17.856
代码如下所示
// std::unique_ptr<boost::asio::deadline_timer> m_poTimer;
void timerExpired(const boost::system::error_code& oError)
{
if (!oError)
{
m_poTimer->expires_from_now(boost::posix_time::millisec(1000));
m_poTimer->async_wait(std::bind(&timerExpired, this, std::placeholders::_1));
}
else
{
}
}
答案 0 :(得分:1)
与通用时间共享操作系统上的任何应用程序层计时器一样,基本上不可能在确切的时间之后保证执行。您的操作系统在进程和线程usually with around 5-10ms resolution之间不断进行上下文切换,并且您的代码无法中断CPU以立即执行,而无需将其唤醒并首先检查计时器。
所有应用程序层计时器都用于“至少 t ”并且您无能为力。
我很遗憾你有这样一个可靠且可重复的模式,但是: