78

Qtで同等のものを探していますGetTickCount()

コードのセグメントが次のように実行されるのにかかる時間を測定できるようにするもの:

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

助言がありますか?

4

5 に答える 5

134

QElapsedTimerそれがそもそもクラスが存在する理由なので、おそらく使用する方が良いと思います。Qt 4.7 で導入されました。また、システムのクロック時間の変更の影響を受けないことに注意してください。

使用例:

#include <QDebug>
#include <QElapsedTimer>
...
...
QElapsedTimer timer;
timer.start();
slowOperation();  // we want to measure the time of this slowOperation()
qDebug() << timer.elapsed();
于 2010-12-07T21:23:27.853 に答える
96

どうQTimeですか?プラットフォームによっては、1 ミリ秒の精度が必要です。コードは次のようになります。

QTime myTimer;
myTimer.start();
// do something..
int nMilliseconds = myTimer.elapsed();
于 2008-10-28T20:13:42.013 に答える
40

最初の回答が受け入れられたとしても、回答を読んだ残りの人々はsivabudhの提案を検討する必要があります。
QElapsedTimerナノ秒単位の時間を計算するためにも使用できます。
コード例:

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();
于 2012-10-21T23:31:57.483 に答える
3

以前の回答を拡張して、すべてを実行するマクロを次に示します。

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

そして、次のように簡単に使用できます。

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

出力:

onSpeedChanged : 102 経過時間: 2 ミリ秒。

于 2016-07-29T05:46:23.300 に答える
2

を使用する場合QElapsedTimerは、このクラスのオーバーヘッドを考慮する必要があります。

たとえば、次のコードは私のマシンで実行されます。

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

この出力が得られます:

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

これを自分で測定し、タイミングのオーバーヘッドを尊重する必要があります。

于 2014-03-31T21:08:06.267 に答える