clock() and CLOCKS_PER_SEC on OSX 10.7
clock() and CLOCKS_PER_SEC on OSX 10.7
我在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秒是0.1。这就是我不明白的地方。我的CLOCKS_PER_SEC就像一个CLOCKS_PER_TEN_SEC
我认为你的转换是在错误的地方,所以你得到一个整数除法。试试这个:
elapsedTime = (double)(clock() - startTime)/CLOCKS_PER_SEC;
编辑:还要注意,在大多数系统上,clock()
测量CPU时间。也许你并没有像你想象的那样使用那么多CPU时间。
将类型转换移到第一个括号内:
elapsedTime = ((double)(clock() - startTime)/CLOCKS_PER_SEC)
现在clock() -startTime
变成了double,强制CLOCKS_PER_SEC也是一个浮点值,你得到的结果是浮点值。否则,这是一个整数除法,你只能得到整数结果。
clock() with CLOCKS_PER_SEC不适合在Mac OS x上使用。clock()返回以tick为单位的处理器时间,而POSIX规定CLOCKS_PER_SEC为1000000,如man clock页面所述。
在我遇到这种情况的情况下,像你一样,计算误差是十倍。因此,clock()以每秒100000个时钟的速度运行。在Windows上,我每秒看到1000个时钟。但是如果您对此进行检查,实际的分辨率和精度可能比这差得多,因此clock()通常不是一个好的解决方案。对于Mac OS X, gettimeofday是一个更好的解决方案。我也认为std::chrono是一个很好的解决方案,应该是一个更好的跨平台选择,但我还没有尝试。
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- OSX MetalKit CVMetalTextureCacheCreateTextureFromImage失败,状态:
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- C ++是否有C ++ 17 OSX 10.13.6的标志
- 循环挂起迭代的 std::擦除 on std::list
- SIGSEGV on Boost UDP 套接字关闭 - tcache_get at malloc.c.
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- std::bind on statd::array 的运算符 []
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- 您将如何连接"on the fly"文本+整数并将其传递给函数?
- 如何修复输出日志中的"EnableInput can only be specified on a Pawn for its Controller"错误
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- GLFW + Vulkan on OSX
- Using g++ on OSX Lion, ld: unknown option: -no_compact_unwin
- GDB 7.3.1 on OSX Lion
- HMAC on Mountain lion OSX 10.8.3 EXC_CRASH
- clock() and CLOCKS_PER_SEC on OSX 10.7
- Valgrind callgrind on OSX Yosemite