[问题] 精准的Sleep function

楼主: eleghost (eleghost)   2016-06-14 18:22:34
我是在VISUAL STUDIO 2013下CODING x64环境
win7 上compile, win10上run.
我想实现精准的SLEEP FUNCTION, 但一直无法精准...
方法1: http://codepad.org/CxkgujFy
方法2: http://codepad.org/6KGumdVO
不知道我的程式出什么问题, 或各位有较好的写法呢?
谢谢!!
作者: james732 (好人超)   2016-06-14 18:29:00
精准指的是误差范围要到多少呢?Windows环境似乎做不到绝对的精准?
作者: Schottky (顺风相送)   2016-06-14 18:33:00
QueryPerformanceFrequency() 写错了
作者: Caesar08 (Caesar)   2016-06-14 19:00:00
你可以用chrono的high_resolution_clockVC++的实作方式也是用QueryPerformanceFrequency
楼主: eleghost (eleghost)   2016-06-14 19:16:00
谢谢回复, 精准到ms等级即可.
作者: Schottky (顺风相送)   2016-06-14 19:34:00
QueryPerformanceCounter() 准确到 us 级并没有问题所以你遇到什么样的麻烦?
作者: EdisonX (卡卡兽)   2016-06-14 22:46:00
我想问 QueryPerformanceCounter 确定可准到 us ??
作者: Schottky (顺风相送)   2016-06-14 23:27:00
看 CPU 而定,Sandy bridge 以后的 CPU 可以到 ns 以下但光是执行 QueryPerformanceCounter() 就要两百多 ns它就是直接去执行 CPU 的 RDTSC (RDTSCP) 指令而已#1IGT3gmB (C_and_CPP) 有解说各种计时function的精确度
作者: freaky (jon)   2016-06-15 00:56:00
问题在于1ms的sleep要干嘛?
作者: EdisonX (卡卡兽)   2016-06-15 03:05:00
好吧, 那应该是我之前有误会些什么了, 之前对 Windows 的印象就是要 sleep 或 timer ,精度上限都在数十 ms 级。
作者: Schottky (顺风相送)   2016-06-15 03:27:00
也只有 performance counter 系列有 ns 级的准确度而已其他就如你所说是 multimedia timer 的 ms 级而且 performance counter 没有对应的 sleep 和 alarm所以原 PO 这样做 busy waiting 实在也是逼不得已
作者: EdisonX (卡卡兽)   2016-06-15 19:35:00
若在里面放sleep(0)就可避开,只是准度应该又会降。
作者: licheer (Keep The Faith)   2016-06-16 00:26:00
realtime os
作者: freaky (jon)   2016-06-16 01:23:00
QueryPerformanceCounter()是用来做高精度timestamp用的Windows的thread time slice一般就是10或15ms所以几ms的sleep()无意义

Links booklink

Contact Us: admin [ a t ] ucptt.com