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