2013-11-08 3 views
1

Я работаю над графическим приложением, которое использует виджет вкладки и имеет несколько вкладок. У меня есть одна вкладка с таблицей. Я создал метод обновления таблицы каждые 5 секунд. Вот мой код:Ограниченные системные ресурсы Qt C++, доступные для приложения

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(); 
     } 
    } 
} 

Вопрос, который я имею, что ~ 30% моего процессора используется всякий раз, когда цикл, пока работает. В основном приложение говорит: «Мы еще там? Мы еще там? Мы еще там?» и это, кажется, всасывает процессор.

Есть ли способ ограничить системные ресурсы или каким-то образом остановить это от захвата большой части процессора?

+1

То, что вы делаете, называется опросом. Вы ищете метод, который позволяет избежать опроса. Похоже, вы можете использовать класс [QTimer] (http://qt-project.org/doc/qt-5.0/qtcore/qtimer.html) для подключения к вашей функции refreshTable в качестве слота. – blueblob

+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); 
    } 
} 
Смежные вопросы