Frage

Ich bin für das Äquivalent in Qt Suche nach GetTickCount()

Etwas, das mir erlaubt, die Zeit zu messen es für ein Segment des Codes nimmt zu laufen, wie in:

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

irgendwelche Vorschläge?

War es hilfreich?

Lösung

Wie wäre es QTime ? Abhängig von Ihrer Plattform soll es 1 Millisekunde Genauigkeit hat. Code würde wie folgt aussehen:

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

Andere Tipps

Ich denke, es ist wahrscheinlich besser zu nutzen QElapsedTimer denn das ist, warum die Klasse besteht in erster Linie. Es wurde mit Qt 4.7 eingeführt. Beachten Sie, dass es auch auf System-Uhr Zeitänderung immuned wird.

Beispiel Nutzung:

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

Auch wenn die erste Antwort akzeptiert wurde, der Rest der Menschen, die die Antworten lesen sollte sivabudh Vorschlag prüfen.
QElapsedTimer kann auch die Zeit in Nanosekunden berechnet werden.
Code-Beispiel:

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

Wenn Sie verwenden möchten, QElapsedTimer , sollten Sie den Aufwand für diese betrachten Klasse.

Zum Beispiel der folgenden Code ausführt auf meinem Rechner:

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

gibt mir diese Ausgabe:

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

Sie sollten für sich selbst messen diese und respektieren den Aufwand für Ihr Timing.

Aufwendet die bisherigen Antworten, hier ist ein Makro, das alles für Sie.

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

Und dann können Sie einfache Verwendung wie:

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

Ausgabe:

  

onSpeedChanged: 102 Abgelaufene Zeit: 2 ms

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top