在实际使用过程中发现了关于sleep() 与 clock() 的两个潜在坑,记录如下
- clock() 返回cpu占用时间,而调用 sleep() 休眠时并不会占用CPU时间。
- clock() 中 CLOCKS_PER_SEC 在Linux下为 1,000,000 , 而在Windows 下为 1000。
测试过程如下:
先准备代码:
#include <time.h>
#include <unistd.h>
#include <stdio.h>
int main(){
clock_t start = clock();
printf("Start\n");
sleep(1);
clock_t end = clock();
printf("End\n");
double duration = (end - start);
printf("Duration: %f ms\n", duration * 1000 / CLOCKS_PER_SEC);
return 0;
}
时间打印为0.000000ms,我有点懵。。。
相同的代码在Windows下测试(进行了部分头文件和sleep()函数的适配),得到为1000ms。
在Linux 下我添加了一个耗时操作来重新测试。代码如下:
void delay(int cnt){
for(int i = 0; i < cnt ; i++){
for(int j = 0 ; j < cnt; j++){
i = i;
}
}
}
int main(){
clock_t start = clock();
printf("Start\n");
delay(999);
clock_t end = clock();
printf("End\n");
double duration = (end - start);
printf("Duration: %f ms\n", duration * 1000 / CLOCKS_PER_SEC);
return 0;
}
打印消耗时间为170ms。确定问题为 sleep 的调用。
clock的定义如下: