Я ищу эквивалент в Qt до GetTickCount()
Что-то, что позволит мне измерить время, необходимое для выполнения сегмента кода:
uint start = GetTickCount();
// do something..
uint timeItTook = GetTickCount() - start;
любые предложения?
Я ищу эквивалент в Qt до GetTickCount()
Что-то, что позволит мне измерить время, необходимое для выполнения сегмента кода:
uint start = GetTickCount();
// do something..
uint timeItTook = GetTickCount() - start;
любые предложения?
Как насчет 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();
		Даже если первый ответ был принят, остальные люди, которые читают ответы, должны рассмотреть предложение sivabudh. 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 мс.