【发布时间】:2021-06-17 16:03:48
【问题描述】:
我正在尝试更好地理解 clock_t clock(void); 函数并有以下问题:
我是否正确理解clock 测量进程的滴答数,因为它正在运行 并且sleep 暂停调用线程——在这种情况下只有一个线程,即主线程——因此暂停整个进程。这意味着clock 不会测量进程的 CPU 时间(滴答声),因为它没有主动运行?
如果是这样,测量实际所需时间的推荐方法是什么?
“clock() 函数返回程序使用的处理器时间的近似值。” Source
“CPU 时间(进程时间)以时钟滴答或秒为单位测量。” Source
"每秒时钟滴答数可以使用:sysconf(_SC_CLK_TCK);"Source获得
#include <stdio.h> // printf
#include <time.h> // clock
#include <unistd.h> // sleep
int main()
{
printf("ticks per second: %zu\n", sysconf(_SC_CLK_TCK));
clock_t ticks_since_process_startup_1 = clock();
sleep(1);
clock_t ticks_since_process_startup_2 = clock();
printf("ticks_probe_1: %zu\n", ticks_since_process_startup_1);
printf("sleep(1);\n");
printf("ticks_probe_2: %zu\n", ticks_since_process_startup_2);
printf("ticks diff: %zu <-- should be 100\n", ticks_since_process_startup_2 - ticks_since_process_startup_1);
printf("ticks diff sec: %Lf <-- should be 1 second\n", (long double)(ticks_since_process_startup_2 - ticks_since_process_startup_1) / CLOCKS_PER_SEC);
return 0;
}
结果输出:
ticks per second: 100
ticks_probe_1: 603
sleep(1);
ticks_probe_2: 616
ticks diff: 13 <-- should be 100
ticks diff sec: 0.000013 <-- should be 1 second
【问题讨论】: