→ diabloevagto:vc 6.0 =_______= 01/12 10:00
推 rebaudiana:io會太慢…(應該吧) 01/12 12:59
→ watson1988:我用Sleep寫過迴圈 其他功能變不能動.. 01/12 13:46
→ watson1988:我想把Sleep換掉 01/12 13:47
→ diabloevagto:sleep會整個停住,你要另外開一個thread才對 01/12 13:51
→ azureblaze:windows的Sleep()精度只到16ms 01/12 13:59
→ azureblaze:簡單一點就while(t2-t1<interval){t2=clock();} 01/12 14:01
→ watson1988:請問什麼是interval? 01/12 14:19
→ diabloevagto:interval 就是你自己定的區間...ex.100ms 01/12 14:33
推 kwpn:你應該用一個初始時間當基準才對,例如t0=2000,當count超過 01/12 17:26
→ kwpn:2100才列印第一筆,超過2200才列印第二筆,依此類推,中間看要 01/12 17:27
→ kwpn:Sleep多久自己取捨. 01/12 17:28
推 kwpn:你目前的作法在失去精準度上會累積,例如第一次Sleep 130ms 01/12 17:31
→ kwpn:第二次Sleep 120ms,兩次總共花了250ms,離預期愈差愈遠.y 01/12 17:32
→ licheer:windows的Sleep()精度有到16ms? 01/12 19:07
推 damody:回樓上,有時有 有時沒有 所以沒有 01/12 19:46
推 licheer:精度的定義是? 01/12 20:28
推 CaptainH:操作上的最小單位 01/12 20:40
推 licheer:沒錯,所以最好分成精度Precision與準度Accuracy來討論 01/12 20:59
推 QQ29:createwaitablerimer 01/13 09:48
推 Ting1024:主要是context switch的問題,不是Sleep()不準。 01/14 00:15
→ Ting1024:用 while(GetTickCount()-T1>100) 的用法也會有此問題 01/14 00:16
→ steve1012:context switch會讓你無法保證剛好准的時間~ 01/14 00:21
→ watson1988:那我該怎麼寫又不會讓CPU停住呢!? 我想不用Sleep 01/14 08:02
→ freaky:Windows tick預設精確度是15.6ms,wait誤差可能到2個tick 01/14 13:21
→ freaky:Windows不是RTOS,無法提供高精度的timer 01/14 13:22
推 freaky:Driver可用ExSetTimerResolution()設定最高1ms的精確度 01/14 13:25
→ freaky:但不建議使用。 01/14 13:25
→ azureblaze:這sleep_for看起來實做會只把Sleep()包裝起來... 01/14 14:37
→ xvid:有什麼參照是提到把Sleep()包起來嗎? 01/14 20:31
→ azureblaze:標準並沒有要求任何準確度 01/14 20:58
→ azureblaze:寫lib的人應該不會找自己麻煩 Sleep()已經符合標準了 01/14 20:59
→ xvid:所以就是沒有憑據 只是你自己的猜測...XD 01/15 00:16
→ azureblaze:"看起來" 01/15 00:24
→ azureblaze:gcc在linux下底層是nanosleep() boost(win)是Sleep() 01/15 00:36
→ azureblaze:vs2012呼叫一個沒文件的_Thrd_sleep() 01/15 00:36
→ azureblaze:不過我不知道win os下還提供其他更準確的sleep機制 01/15 00:37
→ freaky:如上述,Windows沒有高精度的timer 01/15 03:11
→ freaky:如果要高精度的timestamp,可以用QueryPerformanceCounter 01/15 03:13