Вам затраченное время в Qt



Я ищу эквивалент в Qt для GetTickCount()



что-то, что позволит мне измерить время, необходимое для запуска сегмента кода:



uint start = GetTickCount();
// do something..
uint timeItTook = GetTickCount() - start;


какие предложения?

1146   6  

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

    Ничего не найдено.