[問題] 精準的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