1

我在 OSX 中使用 clock() 时遇到问题。我只想显示自程序启动以来经过的时间。问题是,当我将 clock_t 结构除以 CLOCKS_PER_SEC 时,我得到了奇怪的结果。

运行我的程序 10 秒将显示 1.0。CLOCKS_PER_SEC 在我的系统上设置为 1,000,000。

这是我的代码示例:

    //startTime = clock() at the start of the program
    //This is called in each program loop       
    elapsedTime = (double)(clock() - startTime)/CLOCKS_PER_SEC

如果我正在做 elapsedTime * 10 我会以秒为单位得到准确的值。在程序执行期间,我根本不做任何睡眠或等待。

任何帮助了解正在发生的事情将不胜感激。

编辑:

好的,我更正了演员表,但这并没有改变如果我运行程序 10 秒我得到 1.0, 1 seconds is 0.1 的事实。这是我不明白的。我的 CLOCKS_PER_SEC 就像 CLOCKS_PER_TEN_SEC。

4

3 回答 3

2

我认为你的演员在错误的地方,所以你得到一个整数除法。尝试这个:

elapsedTime = (double)(clock() - startTime)/CLOCKS_PER_SEC;

编辑:

另请注意,在大多数系统上,clock()测量 CPU 时间。也许您使用的 CPU 时间没有您想象的那么多。

于 2013-05-22T16:31:35.523 回答
0

将你的演员移动到第一个括号的内部:

 elapsedTime = ((double)(clock() - startTime)/CLOCKS_PER_SEC)

现在clock() -startTime变为双精度,强制 CLOCKS_PER_SEC 也成为浮点值,并且您得到浮点结果。否则,它是一个整数除法,你只能得到整数结果。

于 2013-05-22T16:32:32.877 回答
0

带有 CLOCKS_PER_SEC 的 clock() 不适用于 Mac OS X。clock() 以时钟为单位返回处理器时间,而 POSIX 规定 CLOCKS_PER_SEC 为 1000000,如手册页所述。

在我遇到这种情况的情况下,就像你一样,计算结果相差十倍。因此,clock() 以每秒 100000 个时钟的速度运行。在 Windows 上,我看到每秒 1000 个时钟。但是,如果您对此进行检查,实际的分辨率和精度可能会比这差得多,因此 clock() 通常不是一个好的解决方案。对于 Mac OS X,gettimeofday 是一个更好的解决方案。我还认为 std::chrono 是一个很好的解决方案,应该是一个更好的跨平台选择,但我还没有尝试过。

于 2019-09-06T23:02:52.633 回答