Question

Je recherche l'équivalent en Qt de GetTickCount ()

Quelque chose qui me permettra de mesurer le temps nécessaire à l’exécution d’un segment de code dans:

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

des suggestions?

Était-ce utile?

La solution

Qu'en est-il de QTime ? Selon votre plate-forme, il devrait avoir une précision d'une milliseconde. Le code ressemblerait à quelque chose comme ceci:

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

Autres conseils

Je pense qu'il est probablement préférable d'utiliser QElapsedTimer puisque c'est pourquoi la classe existe en premier lieu. Il a été introduit avec Qt 4.7. Notez qu’il est également protégé contre le changement d’horloge du système.

Exemple d'utilisation:

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

Même si la première réponse était acceptée, le reste des lecteurs des réponses doivent prendre en compte la suggestion de sivabudh .
Vous pouvez également utiliser le QElapsedTimer . en nanosecondes.
Exemple de code:

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 vous souhaitez utiliser QElapsedTimer , vous devriez considérer les frais généraux de cette classe.

Par exemple, le code suivant est exécuté sur ma machine:

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 donne cette sortie:

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

Vous devriez mesurer cela par vous-même et respecter les frais généraux pour votre timing.

Dépendant des réponses précédentes, voici une macro qui fait tout pour vous.

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

Et ensuite, vous pouvez simplement utiliser:

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

sortie:

  

onSpeedChanged: 102 Temps écoulé: 2 ms.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top