作者eleghost (eleghost)
看板C_and_CPP
標題[問題] 精準的Sleep function
時間Tue Jun 14 18:22:34 2016
我是在VISUAL STUDIO 2013下CODING x64環境
win7 上compile, win10上run.
我想實現精準的SLEEP FUNCTION, 但一直無法精準...
方法1:
http://codepad.org/CxkgujFy
方法2:
http://codepad.org/6KGumdVO
不知道我的程式出甚麼問題, 或各位有較好的寫法呢?
謝謝!!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.58.124
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1465899757.A.2CB.html
1F:推 james732: 精準指的是誤差範圍要到多少呢? 06/14 18:29
2F:→ james732: Windows環境似乎做不到絕對的精準? 06/14 18:29
3F:→ Schottky: QueryPerformanceFrequency() 寫錯了 06/14 18:33
4F:→ Caesar08: 你可以用chrono的high_resolution_clock 06/14 19:00
5F:→ Caesar08: VC++的實作方式也是用QueryPerformanceFrequency 06/14 19:01
6F:→ eleghost: 謝謝回復, 精準到ms等級即可. 06/14 19:16
7F:→ Schottky: QueryPerformanceCounter() 準確到 us 級並沒有問題 06/14 19:34
8F:→ Schottky: 所以你遇到什麼樣的麻煩? 06/14 19:34
9F:→ EdisonX: 我想問 QueryPerformanceCounter 確定可準到 us ?? 06/14 22:46
10F:→ Schottky: 看 CPU 而定,Sandy bridge 以後的 CPU 可以到 ns 以下 06/14 23:27
11F:→ Schottky: 但光是執行 QueryPerformanceCounter() 就要兩百多 ns 06/14 23:27
12F:→ Schottky: 它就是直接去執行 CPU 的 RDTSC (RDTSCP) 指令而已 06/14 23:28
14F:→ freaky: 問題在於1ms的sleep要幹嘛? 06/15 00:56
15F:推 EdisonX: 好吧, 那應該是我之前有誤會些什麼了, 之前對 Windows 的 06/15 03:05
16F:→ EdisonX: 印象就是要 sleep 或 timer ,精度上限都在數十 ms 級。 06/15 03:05
17F:→ Schottky: 也只有 performance counter 系列有 ns 級的準確度而已 06/15 03:27
18F:→ Schottky: 其他就如你所說是 multimedia timer 的 ms 級 06/15 03:28
19F:→ Schottky: 而且 performance counter 沒有對應的 sleep 和 alarm 06/15 03:30
20F:→ Schottky: 所以原 PO 這樣做 busy waiting 實在也是逼不得已 06/15 03:31
21F:推 EdisonX: 若在裡面放sleep(0)就可避開,只是準度應該又會降。 06/15 19:35
22F:推 licheer: realtime os 06/16 00:26
23F:→ freaky: QueryPerformanceCounter()是用來做高精度timestamp用的 06/16 01:23
24F:→ freaky: Windows的thread time slice一般就是10或15ms 06/16 01:25
25F:→ freaky: 所以幾ms的sleep()無意義 06/16 01:26