Получить прошедшее время в Qt
Я ищу в Qt эквивалент GetTickCount()
Что-то, что позволит 9X_qt мне измерить время, необходимое для выполнения 9X_cpp сегмента кода, как показано ниже:
uint start = GetTickCount(); // do something.. uint timeItTook = GetTickCount() - start;
есть предложения?
Ответ #1
Ответ на вопрос: Получить прошедшее время в Qt
Я думаю, что, вероятно, лучше использовать 9X_qt QElapsedTimer
, поскольку именно поэтому класс существует 9X_c++ в первую очередь. Он был представлен в Qt 9X_cpp 4.7. Обратите внимание, что он также невосприимчив 9X_cpp к изменению времени системных часов.
Пример 9X_cxx использования:
#include #include ... ... QElapsedTimer timer; timer.start(); slowOperation(); // we want to measure the time of this slowOperation() qDebug() << timer.elapsed();
Ответ #2
Ответ на вопрос: Получить прошедшее время в Qt
Как насчет QTime
? В зависимости от вашей платформы 9X_cxx он должен иметь точность 1 миллисекунду. Код 9X_c++ будет выглядеть примерно так:
QTime myTimer; myTimer.start(); // do something.. int nMilliseconds = myTimer.elapsed();
- Windows не так точна, как UNIX-подобная О ...
Ответ #3
Ответ на вопрос: Получить прошедшее время в Qt
Даже если первый ответ был принят, остальным, кто 9X_c++ прочитал ответы, следует рассмотреть предложение 9X_qt sivabudh
.
QElapsedTimer
также можно использовать для вычисления 9X_cpp времени в наносекундах.
Пример кода:
QElapsedTimer timer; qint64 nanoSec; timer.start(); //something happens here nanoSec = timer.nsecsElapsed(); //printing the result(nanoSec) //something else happening here timer.restart(); //some other operation nanoSec = timer.nsecsElapsed();
- Опять же: это измерение реального времени, а не процессорного времени, потребляе ...
Ответ #4
Ответ на вопрос: Получить прошедшее время в Qt
Продолжая предыдущие ответы, вот макрос, который 9X_cxx сделает все за вас.
#include #include #define CONCAT_(x,y) x##y #define CONCAT(x,y) CONCAT_(x,y) #define CHECKTIME(x) \ QElapsedTimer CONCAT(sb_, __LINE__); \ CONCAT(sb_, __LINE__).start(); \ x \ qDebug() << __FUNCTION__ << ":" << __LINE__ << " Elapsed time: " << CONCAT(sb_, __LINE__).elapsed() << " ms.";
И тогда вы можете просто 9X_cpp использовать как:
CHECKTIME( // any code for (int i=0; i<1000; i++) { timeConsumingFunc(); } )
вывод:
onSpeedChanged: 102 9X_qt Затраченное время: 2 мс
Ответ #5
Ответ на вопрос: Получить прошедшее время в Qt
Если вы хотите использовать QElapsedTimer
, вы должны 9X_qt учитывать накладные расходы этого класса.
Например, на 9X_qt моем компьютере выполняется следующий код:
static qint64 time = 0; static int count = 0; QElapsedTimer et; et.start(); time += et.nsecsElapsed(); if (++count % 10000 == 0) qDebug() << "timing:" << (time / count) << "ns/call";
дает 9X_c++ мне такой результат:
timing: 90 ns/call timing: 89 ns/call ...
Вы должны измерить это 9X_qt сами и учитывать накладные расходы на время.
- См. Ветку здесь http://www.qtcentre.org/threads/62883-Simple-sto ...
-
4
-
1
-
4
-
2
-
1
-
5
-
7
-
4
-
7
-
2
-
8
-
9
-
2
-
2
-
6
-
4
-
5
-
3
-
4
-
4
-
7
-
5
-
14
-
2
-
13
-
4
-
7
-
4
-
5
-
8
-
2
-
4
-
2
-
2
-
1
-
4
-
3
-
5
-
3
-
3
-
9
-
8
-
1
-
4
-
4
-
3
-
8
-
2
-
6
-
3