<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一般而言,Qt有兩種使用定時器的方式, QObject和QTimer,對於第一種需要重寫timerEvent事件來實現,第二種需要宣告一個QTimer的物件或指標,用QTimer::timeout()訊號連線槽函數,設定定時器型別mTimer.setTimerType(Qt::PreciseTimer);
第一種即使高精度的定時器,保持毫秒級別;第二種粗計時器儘量將精度保持在所需間隔的5%以內;第三種非常粗糙的計時器只能保持完整的秒精度.
#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"; }
下面分別展示三種型別的時間間隔:
Qt::PreciseTimer:
Qt::CoarseTimer:
Qt::VeryCoarseTimer:
顯而易見,第一種的精度最高,但偶爾也會超過20ms,對於一些實時性較高的通訊來說,還是達不到要求.使用執行緒加延時能達到最多正負1ms的誤差,一下輸出我使用的是10ms一個週期:
現在也貼上程式碼:
#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); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45