Получить прошедшее время в Qt

Я ищу в Qt эквивалент GetTickCount()

Что-то, что позволит 9X_qt мне измерить время, необходимое для выполнения 9X_cpp сегмента кода, как показано ниже:

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

есть предложения?

79
0
5
Общее количество ответов: 5

Ответ #1

Ответ на вопрос: Получить прошедшее время в Qt

Я думаю, что, вероятно, лучше использовать 9X_qt QElapsedTimer, поскольку именно поэтому класс существует 9X_c++ в первую очередь. Он был представлен в Qt 9X_cpp 4.7. Обратите внимание, что он также невосприимчив 9X_cpp к изменению времени системных часов.

Пример 9X_cxx использования:

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

136
0

Ответ #2

Ответ на вопрос: Получить прошедшее время в Qt

Как насчет QTime? В зависимости от вашей платформы 9X_cxx он должен иметь точность 1 миллисекунду. Код 9X_c++ будет выглядеть примерно так:

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

95
5

  • Windows не так точна, как UNIX-подобная О ...

Ответ #3

Ответ на вопрос: Получить прошедшее время в Qt

Даже если первый ответ был принят, остальным, кто 9X_c++ прочитал ответы, следует рассмотреть предложение 9X_qt sivabudh.
QElapsedTimer также можно использовать для вычисления 9X_cpp времени в наносекундах.
Пример кода:

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();

40
1

  • Опять же: это измерение реального времени, а не процессорного времени, потребляе ...

Ответ #4

Ответ на вопрос: Получить прошедшее время в Qt

Продолжая предыдущие ответы, вот макрос, который 9X_cxx сделает все за вас.

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

И тогда вы можете просто 9X_cpp использовать как:

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

вывод:

onSpeedChanged: 102 9X_qt Затраченное время: 2 мс

3
0

Ответ #5

Ответ на вопрос: Получить прошедшее время в Qt

Если вы хотите использовать QElapsedTimer, вы должны 9X_qt учитывать накладные расходы этого класса.

Например, на 9X_qt моем компьютере выполняется следующий код:

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

дает 9X_c++ мне такой результат:

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

Вы должны измерить это 9X_qt сами и учитывать накладные расходы на время.

2
2

  • См. Ветку здесь http://www.qtcentre.org/threads/62883-Simple-sto ...