Qt 延时函数

Qt延时函数分为两大类,一类是阻塞当前线程,另一类是不阻塞当前线程。

一,阻塞当前线程

1,使用QElapsedTimer
头文件:#include

void Widget::delay_3(int msec)
{
    QElapsedTimer t;
    t.start();
    while(t.elapsed()

2,

void Widget::delay_4(int mesc)
{
    QThread::msleep(mesc);
    //QThread::usleep()
    //QThread::sleep()
}

二,不阻塞当前线程

1,自定义延时函数:
使用QEventLoop。如果去掉QCoreApplication::processEvents(QEventLoop::AllEvents, 100); 可以延时,但也会阻塞线程
QCoreApplication::processEvents(QEventLoop::AllEvents, 100); 使程序在while等待期间,去处理一下本线程的事件循环,处理事件循环最多100ms必须返回本语句,如果提前处理完毕,则立即返回这条语句。

void Widget::delay_2(int msec)
{
    QTime dieTime = QTime::currentTime().addMSecs(msec);
    while( QTime::currentTime() < dieTime )
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}

2,建子事件循环,在子事件循环中,父事件循环仍然是可以执行的

void Widget::delay_1(int msec)
{
    QEventLoop loop;//定义一个新的事件循环
    QTimer::singleShot(msec, &loop, SLOT(quit()));//创建单次定时器,槽函数为事件循环的退出函数
    loop.exec();//事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
}

 

参考:https://blog.csdn.net/qq_40194498/article/details/80063960

你可能感兴趣的:(Qt)