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

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

因此,我clock()fgets()通话前后都使用了它。在我的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),在其他两个OS上显示不超过0秒。

现在我的问题是,为什么clock()在这些OS上的实现会有如此不同。对于Windows,似乎线程在睡眠/等待时时钟一直在滴答,但是对于Linux和Mac不是吗?

编辑:到目前为止,谢谢您的回答,所以这实际上只是Microsoft的错误实现。

任何人都可以回答我的最后一个问题:

回答:

如果我们看一下源代码,为clock()Mac

OS X上,我们可以看到它使用的实施getrusage,并读取ru_utime +

ru_stime。这两个字段测量进程(或系统,代表进程)使用的CPU时间。这意味着,如果usleep(或fgets)导致OS交换不同的程序以执行,直到发生某种情况,那么经过的任何实时时间(也称为“挂历时间”,如“挂钟”中所述)都不会计入该值可以clock()在Mac

OS X上返回。您可能可以在Linux中进行挖掘并找到类似的东西。

但是,在Windows上,clock() 返回自该过程开始以来经过的墙时间。

在纯C语言中,我不知道OS

X,Linux和Windows上可用的函数将以亚秒级的精度返回时间(time.h相当有限)。你必须GetSystemTimeAsFileTime在Windows上,将返回你时间为100ns片,gettimeofday从BSD,将返回时间微秒精度。

如果您可以接受第二精度,则可以使用time(NULL)

如果选择C

++,则可以使用其中的一个时钟std::chrono来获得所需的精度。

以上是 C:Windows和其他操作系统中clock()的不同实现? 的全部内容, 来源链接: utcz.com/qa/407920.html

回到顶部