1

タブウィジェットを使用し、いくつかのタブを持つ GUI アプリケーションに取り組んでいます。テーブルのあるタブが 1 つあります。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 の大部分を占有しないようにする方法はありますか?

4

1 に答える 1

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);
    }
}
于 2013-11-08T19:29:07.283 に答える