簡體   English   中英

QTimer長時間超時

[英]QTimer long timeout

Windows 10 64位長周期計時器上的Qt 5.7 32位

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分鍾的超調時間)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM