OSX 10.7上的clock()和CLOCKS_PER_SEC

时间:2013-05-22 16:27:48

标签: c++ macos clock time.h

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

运行我的程序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秒是0.1。这是我不明白的。我的CLOCKS_PER_SEC就像一个CLOCKS_PER_TEN_SEC。

3 个答案:

答案 0 :(得分:2)

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

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

编辑:

另请注意,在大多数系统上,clock()会测量CPU时间。也许你没有像你想象的那样使用尽可能多的CPU时间。

答案 1 :(得分:0)

将你的演员阵容移到第一个括号内:

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

现在clock() -startTime变为double,迫使CLOCKS_PER_SEC成为浮点值,并得到浮点结果。否则,它是一个整数除法,并且只得到整数结果。

答案 2 :(得分: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是一个很好的解决方案,应该是跨平台的更好选择,但我还没有尝试过。