最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實(shí)現(xiàn)高精度定時(shí)器

 更新時(shí)間:2022年08月04日 16:30:51   作者:_____C  
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)高精度定時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一般而言,Qt有兩種使用定時(shí)器的方式, QObject和QTimer,對(duì)于第一種需要重寫timerEvent事件來實(shí)現(xiàn),第二種需要聲明一個(gè)QTimer的對(duì)象或指針,用QTimer::timeout()信號(hào)連接槽函數(shù),設(shè)置定時(shí)器類型mTimer.setTimerType(Qt::PreciseTimer);

第一種即使高精度的定時(shí)器,保持毫秒級(jí)別;第二種粗計(jì)時(shí)器盡量將精度保持在所需間隔的5%以內(nèi);第三種非常粗糙的計(jì)時(shí)器只能保持完整的秒精度.

#ifndef BACKENDPROIXY_H
#define BACKENDPROIXY_H
?
#include <QObject>
#include <QTimer>
#include <QTime>
?
class BackendProxy : public QObject
{
? ? Q_OBJECT
public:
? ? explicit BackendProxy(QObject *parent = nullptr);
?
signals:
private slots:
? ? void onTimeOut();
private:
? ? QTimer mTimer;
? ? QTime lastTime;
?
};
?
#endif // BACKENDPROIXY_H
#include "backendproixy.h"
?
#include <QDebug>
?
BackendProxy::BackendProxy(QObject *parent) : QObject(parent)
{
? ? connect(&mTimer,&QTimer::timeout,this,&BackendProxy::onTimeOut);
? ? mTimer.setTimerType(Qt::PreciseTimer);
? ? mTimer.start(50);
}
?
?
void BackendProxy::onTimeOut()
{
? ? QTime currentTime;
? ? int elapsed = 0;
? ? if(lastTime == QTime()){
? ? ? ? lastTime = QTime::currentTime();
? ? }else{
? ? ? ? currentTime = QTime::currentTime();
? ? ? ? elapsed = lastTime.msecsTo(currentTime);
? ? ? ? lastTime = QTime::currentTime();
? ? }
? ? qDebug()<<"Run.elapsed ="<<elapsed<<"ms";
}

下面分別展示三種類型的時(shí)間間隔:

Qt::PreciseTimer:

Qt::CoarseTimer:

Qt::VeryCoarseTimer:

顯而易見,第一種的精度最高,但偶爾也會(huì)超過20ms,對(duì)于一些實(shí)時(shí)性較高的通訊來說,還是達(dá)不到要求.使用線程加延時(shí)能達(dá)到最多正負(fù)1ms的誤差,一下輸出我使用的是10ms一個(gè)周期:

現(xiàn)在也貼上代碼:

#ifndef PERFORMANCEFREQUENCY_H
#define PERFORMANCEFREQUENCY_H
?
#include<QThread>
#include<QDebug>
#include<QUdpSocket>
#include <QHostAddress>
?
?
#define SEND_TIME 10
?
class PerformanceFrequency : public QThread
{
? ? Q_OBJECT
public:
? ? explicit PerformanceFrequency(QObject *parent = nullptr);
? ? void setThreadRunning(bool start){bRunning = start;}
? ? void appendByte(QByteArray array);
? ? void removeOneByte(QByteArray array);
signals:
? ? void sendJaguarJointControl(QByteArray ba);
? ? void heartTime(int time);
protected:
? ? void run() override;
private:
? ? QList<QByteArray> listByte;
? ? bool bRunning = true;
?
};
?
#endif // PERFORMANCEFREQUENCY_H
#include "performancefrequency.h"
#include <QTime>
?
#include <QMutex>
#include <QMutexLocker>
?
PerformanceFrequency::PerformanceFrequency(QObject *parent)
? ? : QThread(parent)
{
? ? QByteArray heart;
? ? heart[0] = 0xf0;
? ? heart[1] = heart[2] = heart[3] = heart[4] = heart[5] = heart[6] = heart[7] = ?0;
? ? listByte.append(heart);
}
?
void PerformanceFrequency::run()
{
? ? while(bRunning){
? ? ? ? QTime startTime = QTime::currentTime();
? ? ? ? msleep(SEND_TIME);
? ? ? ? for(int i = 0;i < listByte.size();i++){
? ? ? ? ? ? emit sendJaguarJointControl(listByte.at(i));
? ? ? ? }
?
? ? ? ? QTime stopTime = QTime::currentTime();
? ? ? ? int elapsed = startTime.msecsTo(stopTime);
? ? ? ? emit heartTime(elapsed);
? ? ? ? qDebug()<<"Run.elapsed ="<<elapsed<<"ms";
? ? }
}
?
void PerformanceFrequency::appendByte(QByteArray array)
{
? ? static QMutex mutex;
? ? QMutexLocker locker(&mutex);
? ? listByte.append(array);
}
void PerformanceFrequency::removeOneByte(QByteArray array)
{
? ? static QMutex mutex;
? ? QMutexLocker locker(&mutex);
? ? listByte.removeOne(array);
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • QT通過C++線程池運(yùn)行Lambda自定義函數(shù)流程詳解

    QT通過C++線程池運(yùn)行Lambda自定義函數(shù)流程詳解

    最近在接觸公司的一個(gè)QT桌面項(xiàng)目,其中里面有一個(gè)模塊是使用線程池去運(yùn)行自定義函數(shù)的,自己潛心研究那個(gè)線程池代碼一天,發(fā)現(xiàn)研究不透,看不懂,里面幾乎都是使用C++11的新特性進(jìn)行編寫
    2022-10-10
  • 深度解析C語言中數(shù)據(jù)的存儲(chǔ)

    深度解析C語言中數(shù)據(jù)的存儲(chǔ)

    本文詳細(xì)介紹了C語言中數(shù)據(jù)的存儲(chǔ),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • 關(guān)于C++的強(qiáng)制類型轉(zhuǎn)換淺析

    關(guān)于C++的強(qiáng)制類型轉(zhuǎn)換淺析

    C++的強(qiáng)制類型轉(zhuǎn)換是我們?cè)谌粘i_發(fā)中經(jīng)常會(huì)遇到的,下面這篇文章主要給大家介紹了關(guān)于C++強(qiáng)制類型轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例

    數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之矩陣行列和相等的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • C語言實(shí)現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))

    C語言實(shí)現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))

    這篇文章主要介紹了C語言實(shí)現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 一文帶你掌握C++中的移動(dòng)語義和完美轉(zhuǎn)發(fā)

    一文帶你掌握C++中的移動(dòng)語義和完美轉(zhuǎn)發(fā)

    這篇文章主要為大家詳細(xì)介紹了C++中的移動(dòng)語義和完美轉(zhuǎn)發(fā)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們深入掌握C++有一定的幫助,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • c++?error:crosses?initialization?of問題解決分析

    c++?error:crosses?initialization?of問題解決分析

    這篇文章主要介紹了c++?error:crosses?initialization?ofde?問題解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C語言利用UDP實(shí)現(xiàn)群聊聊天室的示例代碼

    C語言利用UDP實(shí)現(xiàn)群聊聊天室的示例代碼

    UDP是一個(gè)輕量級(jí)、不可靠、面向數(shù)據(jù)報(bào)的、無連接的傳輸層協(xié)議,多用于可靠性要求不嚴(yán)格,不是非常重要的傳輸,如直播、視頻會(huì)議等等。本文將利用UDP實(shí)現(xiàn)簡單的群聊聊天室,感興趣的可以了解一下
    2022-08-08
  • 使用C++繪制GDI位圖的基本編寫實(shí)例

    使用C++繪制GDI位圖的基本編寫實(shí)例

    這篇文章主要介紹了使用C++繪制GDI位圖的基本編寫實(shí)例,一般來說適用于Windwos下的C++的GUI編程,需要的朋友可以參考下
    2015-12-12
  • C++面向?qū)ο笾袠?gòu)造函數(shù)使用詳解

    C++面向?qū)ο笾袠?gòu)造函數(shù)使用詳解

    學(xué)習(xí)過C語言的小伙伴知道:C語言是面向過程的,關(guān)注的是過程,分析出求解問題的步驟,通過函數(shù)調(diào)用逐步解決問題,這篇文章主要介紹了C++面向?qū)ο笾袠?gòu)造函數(shù)使用
    2022-10-10

最新評(píng)論

高淳县| 鹰潭市| 涿州市| 砀山县| 红原县| 普格县| 吴忠市| 定远县| 巩义市| 湖北省| 陵川县| 九龙城区| 如皋市| 甘南县| 同德县| 曲水县| 开封县| 新晃| 砚山县| 尚志市| 郑州市| 香港| 土默特右旗| 黑河市| 冕宁县| 定襄县| 平度市| 久治县| 香河县| 舒兰市| 宜昌市| 贵阳市| 普兰县| 焉耆| 东阿县| 雷山县| 金秀| 抚松县| 双鸭山市| 兴山县| 长岛县|