Qt | How to use Sleep() on Qt(C++)


How to use sleep() in Qt(C++)?

These are two method to use sleep() in Qt(C++).

sleep() by QThread

QThread has a function named by sleep().
It is too simple to use. Just call sleep() where you want.

here is example:

#include <QThread>

//.... do something .....
QThread::sleep(10)  // Wait for 10 sec
//.... do something .....

sleep() with QEventLoop

QThread::sleep() can only use “sec”.
But, QEventLoop can use “msec”. QEventLoop case is useful to control drivers, etc..
How to ? The combination with QEventLoop and QTimer.

here is example:

#include <QTimer>
#include <QEventLoop>

//.... do something .....
QEventLoop loop;
QTimer::singleshot(10, &loop, SLOT(quit());
loop.exec();
// Process after 10 msec
//.... do something .....

By the way。you can use Sleep() of C++, of course.

//.... do something .....
Sleep(10)  // Wait for 10 sec
//.... do something .....

<!--:--><!--:ja--><h1>sleep()をQtで実現する方法</h1>

何かの処理を指定時間待ちたい場合など、sleep()使って待ち時間をコントロールしたいとき。
Qtでは簡単な方法は二通りがあります。

<h2>QThreadでsleepを使う</h2>
QThreadにはsleepが実装されています。
使い方はいたってシンプル。includeしてsleepを呼び出すだけ。


#include <QThread>

//.... do something .....
QThread::sleep(10)  // Wait for 10 sec
//.... do something .....

QEventLoopでsleep()を実現する

Qtは基本的にイベントトリブン型です。
イベントループを発行して指定時間処理させる事で、sleepを実現できます。
この方法のメリットは、QThread::sleep()はsec単位なのに対し、
QEventLoopでは msec 単位で制御が可能な事です。
方法としては、QTimerのsingleshot()と組み合わせて使用します。

#include <QTimer>
#include <QEventLoop>

//.... do something .....
QEventLoop loop;
QTimer::singleshot(10, &loop, SLOT(quit());
loop.exec();
// Process after 10 msec
//.... do something .....

どちらを使うかは状況に応じて使い分けていきましょう。

ちなみに、C++ですのでC++のSleep()ももちろん使えます。

//.... do something .....
Sleep(10)  // Wait for 10 sec
//.... do something .....