在Windows计算机上,clock()返回负时间差

3

我用C语言编写了以下程序,用于计算(在Windows-7机器上)的执行时间:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
double time_spent = 0.0;
clock_t begin;
clock_t end;

begin = clock();
    // code to read a file 
end = clock();
time_spent += ((double)(end - begin)) / CLOCKS_PER_SEC;

printf("Time elapsed is %f seconds", time_spent);
getch();
return 0;
}

执行结束时,(end-begin) 的值为负数。此外,程序执行后,begin 的值为46,而end的值为43。

我正在使用64位Windows 7。

  1. 请问有人能解释一下为什么end的值比begin小吗?
  2. 如何在Windows机器上解决这个问题?

(clock() 返回负值(仅限于POSIX))。


@Blindy 这个解决方案涉及到POSIX,在Windows机器上会不会有所不同呢? 如果我错了,请纠正我,但是clock()在Windows和UNIX上的行为是不同的。 - A. Sinha
1
如果您正在寻找仅适用于Windows的解决方案,则可以使用QueryPerformanceCounter。您提到了[c],但是如果您也可以访问C ++,则便携式等效库是标准的chrono库,它在Windows中内部使用QPC。 - Blindy
在看到我投票之前,我已经“投票关闭”了。在我的投票期间,强调了Windows 7。链接的重复内容是针对Linux的,并没有解决这个问题。我现在投票要重新打开。 - ryyker
2
clock() 回绕 (就像真实的时钟一样),因此过去的时间可能具有比现在更大的值 (与凌晨2点前4小时相同,是晚上10点: 2 - 10 = -8 / 2 - 22 = -20)。 - pmg
@Blindy 在Windows上,UCRT的clock()也使用了QPC。 - dxiv
显示剩余2条评论
1个回答

1
在Windows 7中,有一整套的时钟和间隔计时器可用,包括物理时钟和接口时钟。具体是哪个CPU?某些时间/计时器函数看起来会倒流!至少对于短时间/分辨率而言是一个众所周知的问题。请参考Microsoft网站上的相关信息。你可能需要使用win32 API间隔计时器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接