Qt进阶-阻塞/非阻塞延时
- 阻塞延时:阻塞当前进程,直到延时结束,方可进行其他操作(此时如果有界面,界面会卡住)
- 方法1:
void sleepMsecSuspend(int msec)
{
QThread::msleep(2000);
}
- 方法2:
void sleepMsecSuspend(int msec)
{
QTime curTimer = QTime::currentTime();
QTime nowTimer;
do
{
nowTimer = QTime::currentTime();
} while (curTimer.msecsTo(nowTimer) <= msec);
}
- 方法3:
void sleepMsecSuspend(int msec)
{
QElapsedTimer t;
t.start();
while (t.elapsed() < msec);
}
- 非阻塞延时:在延时的过程中,可以进行其他操作,保证界面不会卡住
- 方法1:
void sleepMsec(int msec)
{
QTime curTimer = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() < curTimer)
{
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
}
- 方法2:
void sleepMsec(int msec)
{
QEventLoop loop;
QTimer::singleShot(msec, &loop, SLOT(quit()));
loop.exec();
}