6 ответов:
как о
QTime? В зависимости от вашей платформы он должен иметь точность 1 миллисекунды. Код будет выглядеть примерно так:QTime myTimer; myTimer.start(); // do something.. int nMilliseconds = myTimer.elapsed();
Я думаю, что это, вероятно, лучше использовать
QElapsedTimerтак вот почему этот класс существует в первую очередь. Он был введен с Qt 4.7. Обратите внимание, что он также иммунизирован к изменению времени часов системы.пример использования:
#include <QDebug> #include <QElapsedTimer> ... ... QElapsedTimer timer; timer.start(); slowOperation(); // we want to measure the time of this slowOperation() qDebug() << timer.elapsed();
даже если первый ответ был принят, остальные люди, которые читают ответы должны рассмотреть 'ы.
QElapsedTimerтакже может быть использован для расчета времени в наносекундах.
Пример кода: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();
общая стратегия состоит в том, чтобы вызвать наблюдаемый метод несколько раз. 10 вызовов обеспечивают точность 1,5 МС, 100 один из 0,15 МС.
Если вы хотите использовать
QElapsedTimer, вы должны учитывать накладные расходы этого класса.например, на моем компьютере выполняется следующий код:
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";дает мне этот выход:
timing: 90 ns/call timing: 89 ns/call ...вы должны измерить это для себя и уважать накладные расходы на ваше время.
используя предыдущие ответы, вот макрос, который делает все для вас.
#include <QDebug> #include <QElapsedTimer> #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.";и затем вы можете просто использовать как:
CHECKTIME( // any code for (int i=0; i<1000; i++) { timeConsumingFunc(); } )выход:
onSpeedChanged: 102 прошедшее время: 2 мс.
Comments