QT非阻塞挂起

在Qt程序中,有时需要在一定时间内等待某个条件满足,但又不能使用阻塞的方式等待,否则会导致界面卡死,无法响应用户的其他操作。这种情况下可以使用Qt提供的非阻塞挂起方法,如下所示:

void nonBlockingPause(int ms)
{
    
    
    QEventLoop loop;
    QTimer timer;
    timer.setInterval(ms);
    timer.setSingleShot(true);
    QObject::connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit);
    timer.start();
    loop.exec();
}

在上述代码中,我们创建了一个QEventLoop对象来实现非阻塞挂起操作。然后使用QTimer对象来设置等待的时间,当时间到了之后就会触发timeout()信号并退出事件循环(由QEventLoop::quit()方法实现)。最后调用QEventLoop的exec()方法来启动事件循环,并进入挂起状态,直到timeout()信号被触发后才会唤醒。

可以将非阻塞挂起方法应用到一些耗时操作中,如网络请求、定时器等等,从而改善用户体验。需要注意的是,在某些场景下,使用这种方式可能会导致一些不可预料的问题,如死循环、CPU占用率高等。因此,使用时需谨慎,并结合实际情况进行调整。

猜你喜欢

转载自blog.csdn.net/qq_42629529/article/details/131007529