QTimer长时间超时

时间:2017-03-16 00:08:00

标签: c++ qt c++11

Qt 5.7 32位Windows 10 64位 长期计时器

QTimer的间隔以msecs为有符号整数给出,因此可设置的最大间隔时间略多于24天(2 ^ 31 /(1000 * 3600 * 24)= 24.85) 我需要一个间隔远远超出此限制的计时器。 所以我的问题是,您推荐哪种替代方案? std :: chrono(C ++ 11)似乎不适合,因为它没有事件处理程序?

阿兰

2 个答案:

答案 0 :(得分:0)

您可以随时创建自己的类,该类在有效期内使用多个QTimer,并计算已经过去的数量。

非常简单的问题。如果你只能数到10而你需要数到100 - 只计算10次。

答案 1 :(得分:0)

我将通过以下方式实现此目的:

计时器启动时,请注意当前时间(以毫秒为单位):

m_timerStartTime = QDateTime::currentMSecsSinceEpoch()

我会以一个很大的间隔(例如10个小时)启动一个计时器,并将一个处理函数附加到计时器上,只是简单地比较了它开始时的时间,看看我们是否到期:

 if(QDateTime::currentMSecsSinceEpoch() - m_timerStartTime > WANTED_DELAY_TIME){
      // Execute the timer payload
      // Stop interval timer
 }

这种简单的方法可以通过多种方式得到改进。例如,即使应用程序停止/重新启动,为了使计时器保持运行,只需将计时器开始时间保存在setting或其他持久存储中,并在应用程序启动时将其读回。

为了提高精度,只需在最后一次迭代中更改定时器处理函数的间隔,以便完美地跟踪初始结束时间(而不是超过10分钟)。