参考:

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
}

 

posted on 2019-11-08 14:26  邶风  阅读(596)  评论(0编辑  收藏  举报