参考:
https://blog.csdn.net/xiezhongyuan07/article/details/81169583
https://www.cnblogs.com/yangjunhe460/p/10289613.html
QTest::qSleep(250); //unresponsive
QTest::qWait(250); //stay responsive
QThread::usleep(100); //milliseconds
QThread::msleep(100); //usecs microseconds 微妙
在主线程中休眠的正确方法:
定时器与QEventLoop配合使用
QEventLoop eventloop;
QTimer::singleShot(5000, &eventloop, SLOT(quit()));
eventloop.exec();
一些相关的内容:
一、-----------------------------------------------
QElapsedTimer 和QTime相比,它提供了更快的计算 elapsed 时间的方法。
QTime t;
t.start();
while(t.elapsed()<1000)
QCoreApplication::processEvents();
QElapsedTimer et;
et.start();
while(et.elapsed()<1000)
QCoreApplication::processEvents();
二、-----------------------------------------------
QTimer 和 QBasicTimer
这两个和本文没有什么直接关系,QTimer估计大家都很熟了。而QBasicTimer估计很少有人用。
与QTimer相比,QBasicTimer更快速、轻量、底层。
与QTimer相比,它不是QObject的派生类。
三、-----------------------------------------------
这是QTest模块提供的等待函数(QTest::qWait)
下面是其源代码
namespace QTest
{
inline static void qWait(int ms)
{
Q_ASSERT(QCoreApplication::instance());
QElapsedTimer timer;
timer.start();
do {
QCoreApplication::processEvents(QEventLoop::AllEvents, ms);
QTest::qSleep(10);
} while (timer.elapsed() < ms);
}
}
跨平台的sleep,参考QTest 模块中的函数
void QTest::qSleep(int ms)
{
QTEST_ASSERT(ms > 0);
#ifdef Q_OS_WIN
Sleep(uint(ms));
#else
struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 };
nanosleep(&ts, NULL);
#endif
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步