如何测量Qt中的函数运行时间?

时间:2016-12-15 10:09:49

标签: c++ qt clock time-measurement qtime

我在调用argon2 - Qt中的内存密集散列函数并测量其运行时间:

...
QTime start = QTime::currentTime();
// call hashing function
QTime finish = QTime::currentTime();
time = start.msecsTo(finish) / 1000.0;
...

在argon2库的测试案例中,时间以另一种方式测量:

...
clock_t start = clock();
// call hashing function
clock_t finish = clock();
time = ((double)finish - start) / CLOCKS_PER_SEC;
...

我正在调用函数,就像他们在测试用例中调用一样。但我的数字增加了两倍(两倍慢)。为什么?如何测量Qt中的函数运行时间? clock()实际测量的是什么?

env :virtualBox,Ubuntu14.04 64bit,Qt5.2.1,Qt Creator 3.0.1。

2 个答案:

答案 0 :(得分:11)

您也可以尝试使用QElapsedTimer:

{{1}}

Documentation of QElapsed Timer

答案 1 :(得分:1)

clock()对于测量函数的时间花费并不准确。它只返回整个程序的滴答数,而它在CPU右侧,它不计算阻塞IO操作或休眠。它只计算程序在CPU上运行的刻度(处理)。如果你在你的代码中放入睡眠,你将失去CPU,这个时间不计时钟()。 您必须使用time()或gettimeofday()或更准确的rdtsc汇编指令。

看看这些问题:

clock() accuracy

Why is CLOCKS_PER_SEC not the actual number of clocks per second?

在Qt源代码中,您将看到Qt使用gettimeofday在Unix下实现QTime :: currentTime() https://github.com/radekp/qt/blob/master/src/corelib/tools/qdatetime.cpp:第1854行