QTimer 长时间超时



Qt 5.7 32 位在 Windows 10 64 位上长周期定时器

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

阿兰

您始终可以创建自己的类,该类在有效期间使用多个QTimer,只需计算已经过的数量。

很简单的问题。如果你只能数到 10 而你需要数到 100 - 只需数到 10 十次。

我将通过以下方式实现这一点:

计时器启动时,记下当前时间(以毫秒为单位(,如下所示:

m_timerStartTime = QDateTime::currentMSecsSinceEpoch()

这样,我会以某个较大的间隔(例如 10 小时(启动一个计时器,并将一个处理程序函数附加到计时器上,该计时器只是比较自它开始以来的时间,以查看我们是否到期:

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

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

为了提高精度,只需在上次迭代中更改计时器处理程序函数的间隔,以便它完美地跟踪初始结束时间(而不是最多超调 10 分钟(。

最新更新