考虑:
#include <time.h>
#include <unistd.h>
#include <iostream>
using namespace std;
const int times = 1000;
const int N = 100000;
void run() {
for (int j = 0; j < N; j++) {
}
}
int main() {
clock_t main_start = clock();
for (int i = 0; i < times; i++) {
clock_t start = clock();
run();
cout << "cost: " << (clock() - start) / 1000.0 << " ms." << endl;
//usleep(1000);
}
cout << "total cost: " << (clock() - main_start) / 1000.0 << " ms." << endl;
}
这是示例代码。在时序循环的前26次迭代中,该run
函数的成本约为0.4 ms,但随后成本降低为0.2 ms。
如果不加usleep
注释,则延迟环路将花费0.4 ms进行所有运行,而不会加速。为什么?
该代码是使用g++ -O0
(无需优化)编译的,因此不会优化延迟循环。它运行在3.30 GHz的Intel®CoreTM i3-3220 CPU上,具有3.13.0-32通用的Ubuntu 14.04.1 LTS(Trusty Tahr)。
usleep()
因为它可能被中断,或者因为您的参数无效而可能什么也不做。这将使任何计时都不可靠。