【发布时间】:2015-01-26 12:43:52
【问题描述】:
我必须为大学编写一个非常简单的控制台程序,该程序必须测量输入所需的时间。
因此,我在fgets()call 之前和之后使用了clock()。在我的 Windows 计算机上运行时,它运行良好。然而,当在我的朋友 Mac-Book 和 Linux-PC 上运行时,结果非常小(仅几微秒的时间)。
我在所有 3 个操作系统上都尝试了以下代码:
#include <stdio.h>
#include <time.h>
#include <unistd.h>
void main()
{
clock_t t;
printf("Sleeping for a bit\n");
t = clock();
// Alternatively some fgets(...)
usleep(999999);
t = clock() - t;
printf("Processor time spent: %lf", ((double)t) / CLOCKS_PER_SEC);
}
在 Windows 上,输出显示 1 秒(或您在使用 fgets 时输入的时间),而在其他两个操作系统上则不超过 0 秒。
现在我的问题是为什么在这些操作系统上实现clock() 会有如此大的差异。对于 Windows,当线程处于睡眠/等待状态时,时钟似乎一直在滴答作响,但对于 Linux 和 Mac 却不是?
编辑: 谢谢你们到目前为止的答案,所以这只是微软的错误实施。
谁能回答我最后一个问题:
还有没有办法测量我想要在所有 3 个使用 C 标准库的系统上测量的内容,因为 clock() 似乎只在 Windows 上以这种方式工作?
【问题讨论】:
-
看一下说明书:man7.org/linux/man-pages/man3/clock.3.html windows box 摇摇晃晃,其他都还好。 (它应该近似于使用的处理器时间,而不是经过的挂钟时间。)
标签: c linux windows macos clock