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 分钟(。