Max*_*son 5 c linux windows macos clock
我必须为大学编写一个非常简单的控制台程序,它必须测量输入所需的时间.
因此我clock()在前面和fgets()通话后使用.在我的Windows计算机上运行时,它工作得很好.然而,当我在我的朋友Mac-Book和Linux-PC上运行时,它给出了非常小的结果(只有几微秒的时间).
我在所有3 OS上尝试了以下代码:
#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);
}
Run Code Online (Sandbox Code Playgroud)
在Windows上,输出显示1秒(或使用时键入的时间fgets),另外两个操作系统显示的时间不超过0秒.
现在我的问题是为什么clock()在这些操作系统的实现上存在这样的差异.对于Windows来说,当线程处于休眠/等待状态时,时钟似乎仍在滴答作响,但对于Linux和Mac则不然?
编辑:感谢你们到目前为止的答案,所以这只是微软的错误实现.
有人可以回答我的上一个问题:
还有一种方法可以测量我想要使用C标准库在所有3个系统上测量的内容,因为它clock()似乎只在Windows上以这种方式工作吗?
如果我们查看 Mac OS X 上的源代码,clock()我们会发现它是使用getrusage和 读取的ru_utime + ru_stime。这两个字段测量进程(或代表进程的系统)使用的CPU时间。这意味着,如果usleep(或fgets)导致操作系统交换不同的程序来执行,直到发生某些情况,则经过的任何实际时间(也称为“挂钟”,如“挂钟”)不计入该值在 Mac OS X 上返回clock()。您可能会在 Linux 中深入研究并找到类似的东西。
然而,在 Windows 上,返回自进程开始以来经过的clock() 挂起时间量。
在纯 C 中,我不知道 OS X、Linux 和 Windows 上是否有可用的函数可以以亚秒精度返回挂钟时间(time.h 相当有限)。在GetSystemTimeAsFileTimeWindows 上,将以 100 纳秒为单位返回时间,gettimeofday在 BSD 上,将返回微秒精度的时间。
如果您可以接受第二精度,则可以使用time(NULL).
如果可以选择 C++,您可以使用其中一个时钟来std::chrono获得所需精度的时间。
| 归档时间: |
|
| 查看次数: |
1078 次 |
| 最近记录: |