Qt 阻塞式计时方法:QEventLoop 和 QThread.sleep() 实现
Qt 中除了 QTimer 之外,还有其他阻塞式的计时方法可以使用。
一种常见的方法是使用 QEventLoop 来实现阻塞式的计时。可以通过调用 QEventLoop 的 exec() 函数来启动事件循环,并在需要计时的地方调用 QTimer::singleShot() 函数来延时触发一个信号,从而实现计时功能。示例如下:
#include <QCoreApplication>
#include <QEventLoop>
#include <QTimer>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QEventLoop loop;
QTimer::singleShot(5000, &loop, &QEventLoop::quit); // 5秒后退出事件循环
loop.exec(); // 启动事件循环,阻塞程序直到计时结束
// 计时结束后的处理逻辑
qDebug() << "Time's up!";
return a.exec();
}
在上述示例中,使用 QEventLoop 来启动一个事件循环,并在 5 秒后退出事件循环。这样程序会在调用 loop.exec() 时被阻塞,直到计时结束才会继续执行后面的逻辑。
另外,还可以使用 QThread 的 sleep() 函数来实现阻塞式的计时。示例如下:
#include <QCoreApplication>
#include <QThread>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QThread::sleep(5); // 阻塞程序 5 秒
// 计时结束后的处理逻辑
qDebug() << "Time's up!";
return a.exec();
}
在上述示例中,使用 QThread 的 sleep() 函数来阻塞程序 5 秒,然后执行计时结束后的处理逻辑。
需要注意的是,这种阻塞式的计时方法会导致程序在计时期间无法响应其他事件,如果需要保持程序的响应性,建议使用非阻塞式的计时方式,如 QTimer。
原文地址: https://www.cveoy.top/t/topic/p0LI 著作权归作者所有。请勿转载和采集!