欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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事件來(lái)實(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ì)超過(guò)20ms,對(duì)于一些實(shí)時(shí)性較高的通訊來(lái)說(shuō),還是達(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);
}

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

相關(guān)文章

  • C++中const的實(shí)現(xiàn)機(jī)制深入分析

    C++中const的實(shí)現(xiàn)機(jī)制深入分析

    C語(yǔ)言以及C++語(yǔ)言中的const究竟表示什么?其具體的實(shí)現(xiàn)機(jī)制又是如何實(shí)現(xiàn)的呢?本文將對(duì)這兩個(gè)問題進(jìn)行一些分析,需要了解的朋友可以參考下
    2012-12-12
  • C語(yǔ)言鏈表詳解及代碼分析

    C語(yǔ)言鏈表詳解及代碼分析

    這篇文章主要介紹了C語(yǔ)言鏈表詳解及代碼分析,說(shuō)明了鏈表的定義與概念,通過(guò)詳細(xì)的代碼展示了基于鏈表的增刪改查功能,希望本文能對(duì)你有所幫助
    2021-06-06
  • 如何在 clion 運(yùn)行多個(gè) main 函數(shù)(方法詳解)

    如何在 clion 運(yùn)行多個(gè) main 函數(shù)(方法詳解)

    這篇文章主要介紹了如何在 clion 運(yùn)行多個(gè) main 函數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 詳細(xì)解析命令行的getopt_long()函數(shù)

    詳細(xì)解析命令行的getopt_long()函數(shù)

    getopt_long支持長(zhǎng)選項(xiàng)的命令行解析,函數(shù)中的參數(shù)argc和argv通常直接從main()的兩個(gè)參數(shù)傳遞而來(lái)
    2013-09-09
  • IOS 開發(fā)UITextView回收或關(guān)閉鍵盤

    IOS 開發(fā)UITextView回收或關(guān)閉鍵盤

    這篇文章主要介紹了IOS 開發(fā)UITextView回收或關(guān)閉鍵盤的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C++九種排序具體實(shí)現(xiàn)代碼

    C++九種排序具體實(shí)現(xiàn)代碼

    這篇文章主要介紹了C++九種排序具體實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 純C語(yǔ)言:貪心Prim算法生成樹問題源碼分享

    純C語(yǔ)言:貪心Prim算法生成樹問題源碼分享

    這篇文章主要介紹了貪心Prim算法生成樹問題源碼,有需要的朋友可以參考一下
    2014-01-01
  • c++中string和vector的詳細(xì)介紹

    c++中string和vector的詳細(xì)介紹

    這篇文章主要介紹了c++中string和vector的詳細(xì)介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • 70行C語(yǔ)言代碼實(shí)現(xiàn)貪吃蛇

    70行C語(yǔ)言代碼實(shí)現(xiàn)貪吃蛇

    這篇文章主要為大家詳細(xì)介紹了70行C語(yǔ)言代碼實(shí)現(xiàn)貪吃蛇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用

    C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用

    這篇文章主要介紹了C語(yǔ)言中的for循環(huán)語(yǔ)句基本語(yǔ)法及使用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06

最新評(píng)論