一般而言,qt有兩種使用定時器的方式,qobject和qtimer,對於第一種需要重寫timerevent事件來實現,第二種需要宣告乙個qtimer的物件或指標,用qtimer::timeout()訊號連線槽函式,設定定時器型別mtimer.settimertype(qt::precisetimer);
第一種即使高精度的定時器,保持毫秒級別;第二種粗計時器盡量將精度保持在所需間隔的5%以內;第三種非常粗糙的計時器只能保持完整的秒精度.
#ifndef backendproixy_h
顯而易見,第一種的精度最高,但偶爾也會超過20ms,對於一些實時性較高的通訊來說,還是達不到要求.使用執行緒加延時能達到最多正負1ms的誤差,一下輸出我使用的是10ms乙個週期:
現在也貼上**:
#ifndef performancefrequency_h
#define performancefrequency_h
#include#include#include#include #define send_time 10
class performancefrequency : public qthread
void removeonebyte(qbytearray array);
signals:
void sendjaguarjointcontrol(qbytearray ba);
void hearttime(int time);
protected:
void run() override;
private:
qlistlistbyte;
bool brunning = true;
};#endif // performancefrequency_h
#include "performancefrequency.h"
#include #include #include performancefrequency::performancefrequency(qobject *parent)
: qthread(parent)
void performancefrequency::run()
qtime stoptime = qtime::currenttime();
int elapsed = starttime.msecsto(stoptime);
emit hearttime(elapsed);
qdebug()<
}}void performancefrequency::removeonebyte(qbytearray array)
C 高精度定時器
ktimer.h windows graphics programming win32 gdi and directdraw feng yuan publisher prentice hall ptr first edition december 01,2000 高精度納秒計時器,最後修改 2008...
C 高精度定時器
windowsgraphicsprogrammingwin32gdianddirectdraw fengyuan publisher prenticehallptr firsteditiondecember01,2000 高精度納秒計時器,最後修改 usage intmain pragmaonce ...
LINUX核心定時器(高精度 低精度)實現迴圈定時
引言 linux從核心2.6.16開始引入了高精度定時器,達到ns級別。自此,核心擁有兩套並行計時器,低精度和高精度。如果高精度沒有開啟,即使使用高精度函式,預設使用的仍舊是低精度。高精度 雖然核心已經支援高精度,但是對於不少產品而言,由於核心是裁剪的,配置的時候並沒有加入編譯進去,雖然對應的核心原...