c++ - gui - qt license
Obtenga tiempo transcurrido en Qt (6)
¿Qué hay de QTime
? Dependiendo de su plataforma, debe tener una precisión de 1 milisegundo. El código se vería así:
QTime myTimer;
myTimer.start();
// do something..
int nMilliseconds = myTimer.elapsed();
Estoy buscando el equivalente en Qt para GetTickCount()
Algo que me permitirá medir el tiempo que demora ejecutar un segmento de código como en:
uint start = GetTickCount();
// do something..
uint timeItTook = GetTickCount() - start;
¿alguna sugerencia?
Creo que probablemente sea mejor usar QElapsedTimer
ya que es por eso que la clase existe en primer lugar. Fue introducido con Qt 4.7. Tenga en cuenta que también está inmunizado al cambio de hora del reloj del sistema.
Ejemplo de uso:
#include <QDebug>
#include <QElapsedTimer>
...
...
QElapsedTimer timer;
timer.start();
slowOperation(); // we want to measure the time of this slowOperation()
qDebug() << timer.elapsed();
Gastando las respuestas anteriores, aquí hay una macro que hace todo por ti.
#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.";
Y luego puedes usarlo como:
CHECKTIME(
// any code
for (int i=0; i<1000; i++)
{
timeConsumingFunc();
}
)
salida:
onSpeedChanged: 102 Tiempo transcurrido: 2 ms.
Incluso si la primera respuesta fue aceptada, el resto de las personas que leen las respuestas deberían considerar la sugerencia de sivabudh
.
QElapsedTimer
también se puede usar para calcular el tiempo en nanosegundos.
Ejemplo 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();
Si desea utilizar QElapsedTimer
, debe considerar la sobrecarga de esta clase.
Por ejemplo, el siguiente código se ejecuta en mi 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 da esta salida:
timing: 90 ns/call
timing: 89 ns/call
...
Debe medir esto por usted mismo y respetar la sobrecarga de su tiempo.
Una estrategia general es llamar al método observado varias veces. 10 llamadas entregan una precisión de 1,5 ms, 100 una de 0,15 ms.