今天想到一个while循环等待,超时跳出的应用,比如等待超时信号,超时重发等,用QTimer实现,做一记录:
mTimeout = false;
validSignal = false;
QTimer *timer = new QTimer(this);
timer->setInterval(5000);
connect(timer,SIGNAL(timeout()),this,SLOT(SlotTimeOut()));
timer->start();
while(!mTimeout)
{
if(validSignal)
{
//dosomething
break;
}
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
qDebug()<<"waiting";
}
timer->stop();
void MainWindow::SlotTimeOut()
{
mTimeout = true;
qDebug()<<"timeout";
}
定义一个成员布尔变量mTimeout控制超时标志
定义一个布尔变量validSignal用来检测有效信号出现
while循环中需要QCoreApplication::processEvents(QEventLoop::AllEvents, 100);不然会死在while里边!