本文介绍几种Qt延时的方法,包括阻塞和非阻塞的。
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::sleep(int msec)
{
if (msec <= 0) {
return;
}
#if 1
//非阻塞方式延时,推荐
QEventLoop loop;
QTimer::singleShot(msec, &loop, SLOT(quit()));
loop.exec();
#else
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
//阻塞方式延时,如果在主线程会卡住主界面
QThread::msleep(msec);
#else
//非阻塞方式延时,据说可能有问题
QTime endTime = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() < endTime) {
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
#endif
#endif
}
在多线程中可以使用QThread::sleep()或者QThread::msleep()或QThread::usleep()或QThread::wait()进行延时处理。
Sleep方法不会释放对象锁,其他线程无法访问对象,因此会阻塞线程;而Wait方法会释放对象锁,使得其他线程能够访问该对象。
原文链接:Qt延时的几种方法-CSDN博客