Qt高精度定時器

2021-10-12 07:21:02 字數 2121 閱讀 8699

一般而言,qt有兩種使用定時器的方式,qobjectqtimer,對於第一種需要重寫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級別。自此,核心擁有兩套並行計時器,低精度和高精度。如果高精度沒有開啟,即使使用高精度函式,預設使用的仍舊是低精度。高精度 雖然核心已經支援高精度,但是對於不少產品而言,由於核心是裁剪的,配置的時候並沒有加入編譯進去,雖然對應的核心原...