سؤال

وأنا أبحث عن ما يعادل في كيو تي لGetTickCount()

وشيء من شأنها أن تسمح لي لقياس الوقت الذي يستغرقه لشريحة من التعليمات البرمجية لتشغيل كما في:

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

وأي اقتراحات؟

هل كانت مفيدة؟

المحلول

وماذا عن QTime ؟ اعتمادا على النظام الأساسي الخاص بك ينبغي أن يكون 1 دقة ميلي ثانية واحدة. سوف كود ننظر بشيء من هذا القبيل:

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

نصائح أخرى

وأعتقد أنه ربما يكون من الأفضل استخدام QElapsedTimer منذ هذا هو السبب في الطبقة موجود في المقام الأول. وكان عرض مع كيو تي 4.7. لاحظ أنه يتم immuned أيضا إلى تغيير وقت على مدار الساعة النظام.

والاستخدام مثال:

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

وحتى لو تم قبول الجواب الأول، وبقية الشعب الذين يقرأون إجابات ينبغي أن تنظر اقتراح 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();

إذا كنت تريد استخدام 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 
...

ويجب قياس هذا لنفسك واحترام النفقات العامة للتوقيت الخاص بك.

وإنفاق الأجوبة السابقة، وهنا هو الماكرو الذي يفعل كل شيء بالنسبة لك.

#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 مللي ثانية

.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top