一、关于Qt实现非阻塞延时的方法:
void QSleepTimeSet::Delay_MSec(unsigned int msec)
{
QTime _Timer = QTime::currentTime().addMSecs(msec);
while( QTime::currentTime() < _Timer )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
其中的msec为需要延时的毫秒数,例如,你要实现5秒延时,则msec的值就是 :5000
二、关于Qt中的阻塞延时实现方法:
void QSleepTimeSet::Delay_MSec_Suspend(unsigned int msec)
{
QTime _Timer = QTime::currentTime();
QTime _NowTimer;
do{
_NowTimer=QTime::currentTime();
}while (_Timer.msecsTo(_NowTimer)<=msec);
}
其中的msec为需要延时的毫秒数,例如,你要实现5秒延时,则msec的值就是 :5000
三、QT下sleep的实现
QT下使用sleep函数比较费劲,常用的几个头文件里都没有这个函数。在用于单元测试的QTest类中有一个sleep,可以通过:
#include < QTest >
.......
QTest::qSleep ( 100 );
这种方式来调用。帮助文档上说,qSleep实际上是调用了操作系统自带的sleep函数,比如在Linux上调用nanosleep(),在windows则是Sleep()
当然我们也可以自己使用操作系统自带的sleep来实现休眠,通过Q_OS_WIN32、 Q_OS_LINUX来实现条件编译
- #if defined Q_OS_WIN32
- #include <windows.h>
- void sleep(unsigned long nSeconde)
- {
- Sleep(nSeconde)*1000);
- }
- #endif
- #if defined Q_OS_LINUX
- #include <unistd.h>
- #endif