gpt4 book ai didi

C: clock() 在 Windows 和其他操作系统中的不同实现?

转载 作者:IT王子 更新时间:2023-10-29 00:35:19 27 4
gpt4 key购买 nike

我必须为大学编写一个非常简单的控制台程序,该程序必须测量进行输入所需的时间。

因此,我在 fgets() 调用前后使用了 clock()。在我的 Windows 计算机上运行时,它运行良好。然而,当在我的 friend 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 却不是?

编辑:感谢你们到目前为止的回答,所以这真的只是微软的错误实现。

谁能回答我的最后一个问题:

还有没有一种方法可以使用 C 标准库来测量我想要在所有 3 个系统上测量的内容,因为 clock() 似乎只能在 Windows 上以这种方式工作?

最佳答案

您遇到了 a known bug在微软的 C 运行时。即使该行为不符合任何 ISO C 标准,它也不会被修复。来自错误报告:

However, we have opted to avoid reimplementing clock() in such a way that it might return time values advancing faster than one second per physical second, as this change would silently break programs depending on the previous behavior (and we expect there are many such programs).

关于C: clock() 在 Windows 和其他操作系统中的不同实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27178789/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com