Lassen Sie sich die verstrichene Zeit in Qt
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?
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
.