作者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/cn.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