Ich suche das Äquivalent in Qt zu GetTickCount()
Damit kann ich die Zeit messen, die ein Codesegment benötigt, um wie folgt ausgeführt zu werden:
uint start = GetTickCount();
// do something..
uint timeItTook = GetTickCount() - start;
irgendwelche Vorschläge?
Ich denke, es ist wahrscheinlich besser zu verwenden,
QElapsedTimer
da die Klasse deshalb überhaupt existiert. Es wurde mit Qt 4.7 eingeführt. Beachten Sie, dass es auch gegen die Änderung der Uhrzeit des Systems immun ist.Anwendungsbeispiel:
#include <QDebug> #include <QElapsedTimer> ... ... QElapsedTimer timer; timer.start(); slowOperation(); // we want to measure the time of this slowOperation() qDebug() << timer.elapsed();
quelle
Selbst wenn die erste Antwort akzeptiert wurde, sollte der Rest der Leute, die die Antworten lesen, den
sivabudh
Vorschlag berücksichtigen .QElapsedTimer
kann auch verwendet werden, um die Zeit in Nanosekunden zu berechnen.Codebeispiel:
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();
quelle
start()
und nicht die vom Prozess verbrauchte Zeit. Es ist ein Echtzeit-Timer. Wenn der Prozess (aufgrund von Multitasking) vorbelegt wird, vergeht weiterhin Zeit, und QElapsedTimer misst dies ebenfalls. QElapsedTimer wäre so gut wie nutzlos, wenn es die Zeitmessung beenden würde, wenn der Prozess verhindert wird.Wenn Sie verwenden möchten
QElapsedTimer
, sollten Sie den Overhead dieser Klasse berücksichtigen.Auf meinem Computer wird beispielsweise der folgende Code ausgeführt:
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 dies selbst messen und den Overhead für Ihr Timing respektieren.
quelle
Hier ist ein Makro, das alles für Sie erledigt.
#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 einfach verwenden als:
CHECKTIME( // any code for (int i=0; i<1000; i++) { timeConsumingFunc(); } )
Ausgabe:
quelle