我正在使用一个使用标签窗口小部件并有几个标签的GUI应用程序。我有一个有桌子的标签。我创建了一个每5秒刷新一次表的方法。这是我的代码:
void MainWindow::delay(int seconds)
{
QTime dieTime = QTime::currentTime().addSecs(seconds);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
void MainWindow::on_tabWidget_currentChanged(int inx)
{
if (inx == 3)
{
while (ui->tabWidget->currentIndex() == 3)
{
delay(5);
refreshTable();
}
}
}
我遇到的问题是,只要while循环运行,我的CPU就会被用尽~30%。基本上应用程序说“我们还在吗?我们还在吗?我们还在吗?”这似乎吸了CPU。
有没有办法限制系统资源,或者某种方法来阻止它占用大部分CPU?
答案 0 :(得分:1)
感谢bluebob让我指向正确的方向。这是我的解决方案:
QTimer *timer;
void MainWindow::handleTableRefresh()
{
if (ui->tabWidget->currentIndex() == 3)
{
refreshTable();
}
else
{
disconnect(timer, SIGNAL(timeout()), this, SLOT(handleTableRefresh()));
timer->stop();
}
}
void MainWindow::on_tabWidget_currentChanged(int inx)
{
if (inx == 3)
{
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(handleTableRefresh()));
timer->start(5000);
}
}