我在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。
答案 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)
clock()在Mac OS X上不适合使用。clock()以秒为单位返回处理器时间,而POSIX规定,CLOCKS_PER_SEC为1000000,如人工时钟页面中所述。
在我遇到这种情况的情况下,像您一样,计算偏差为十分之一。因此,clock()以每秒100000个时钟的速度运行。在Windows上,我看到每秒1000个时钟。但是,如果您对此进行检查,则实际的分辨率和精度可能远不如此,因此,Clock()通常不是一个好的解决方案。对于Mac OS X,gettimeofday是更好的解决方案。我还认为std :: chrono是一个很好的解决方案,应该是跨平台的更好选择,但我还没有尝试过。