The most accurate timer qt C++

前端 未结 2 1164
小蘑菇
小蘑菇 2021-01-29 12:14

I use QTimer to send periodically \'Ping\' packet to the server (MQTT client). But it timer is not absolutely accurate. After some time of working it has some delay and server b

2条回答
  •  梦毁少年i
    2021-01-29 12:25

    #pragma once
    
    #include 
    #include 
    
    class PrecisePolling : public QObject
    {
        Q_OBJECT
    private:
        std::uint64_t previousPollingTime;
    public:
        PrecisePolling();
    
    public slots:
        void doPolling();
    

    #include "precisepolling.h"
    #include "QDateTime"
    #include 
    
    PrecisePolling::PrecisePolling()
        : previousPollingTime(QDateTime::currentMSecsSinceEpoch())
    {}
    
    void PrecisePolling::doPolling()
    {
        const std::uint64_t ms = QDateTime::currentMSecsSinceEpoch();
        qDebug() << ms - previousPollingTime;
        previousPollingTime = ms;
    }
    

    #include 
    #include 
    #include 
    #include "precisepolling.h"
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        QThread thread;
        QTimer timer;
        PrecisePolling pp;
    
        timer.setInterval(1000);
        timer.setTimerType(Qt::PreciseTimer);
    
        QObject::connect(&timer, &QTimer::timeout, &pp, &PrecisePolling::doPolling);
        timer.start();
        timer.moveToThread(&thread);
        pp.moveToThread(&thread);
    
        thread.start(QThread::Priority::TimeCriticalPriority);
    
        return a.exec();
    }
    

提交回复
热议问题