The most accurate timer qt C++

前端 未结 2 1168
小蘑菇
小蘑菇 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条回答
  •  感情败类
    2021-01-29 12:38

    Run a QTimer on a separate QThread which doesn't do anything else. If you're running the timer on an already busy thread the timeout events may not come on time or not at all.

    Make a worker class e.g. "PingPacketWorker", implement a slot that does pinging. Make a QThread. Connect your QTimer and PingPacketWorker signal/slots. Start the timer. Call moveToThread on the PingPacketWorker and the QTimer, the timer should restart because of moveToThread, note you can only start / stop it on the owner thread!

    You could also increase your QThread's priority since you asked for "the most accurate" solution ...

    Update:

    Also, set QTimer::setTimerType(Qt::PreciseTimer)

    The default Qt::CoarseTimer is less precise (5% of the interval)

提交回复
热议问题