Pergunta

Eu estou procurando o equivalente em Qt para GetTickCount()

Algo que me permite medir o tempo que leva para um segmento de código para executar como em:

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

alguma sugestão?

Foi útil?

Solução

Como sobre QTime ? Dependendo da sua plataforma deve ter 1 milissegundo precisão. Código seria algo parecido com isto:

QTime myTimer;
myTimer.start();
// do something..
int nMilliseconds = myTimer.elapsed();

Outras dicas

Eu acho que é provavelmente melhor usar QElapsedTimer uma vez que é por isso que a classe existe, em primeiro lugar. Foi introduzido com Qt 4.7. Note que também é immuned altere o horário do sistema.

Exemplo de utilização:

#include <QDebug>
#include <QElapsedTimer>
...
...
QElapsedTimer timer;
timer.start();
slowOperation();  // we want to measure the time of this slowOperation()
qDebug() << timer.elapsed();

Mesmo que a primeira resposta foi aceito, o resto das pessoas que lêem as respostas devem considerar a sugestão de sivabudh.
QElapsedTimer também pode ser usado para calcular o tempo em nanossegundos.
exemplo de código:

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

Se você quiser usar QElapsedTimer , você deve considerar a sobrecarga deste classe.

Por exemplo, o seguinte código executado na minha máquina:

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";

me dá essa saída:

timing: 90 ns/call 
timing: 89 ns/call 
...

Você deve medir isso por si mesmo e respeitar a sobrecarga para o seu timing.

Gastar as respostas anteriores, aqui está uma macro que faz tudo para você.

#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.";

E, em seguida, você pode usar simples como:

CHECKTIME(
    // any code
    for (int i=0; i<1000; i++)
    {
       timeConsumingFunc();
    }
)

saída:

onSpeedChanged: 102 tempo decorrido: 2 ms

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top