看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC 6.0 問題(Question): clock_t t1,t2; t1=clock(); for(int j=0; j<10 ; j++) { Sleep(100); t2=clock(); printf("%lf\n",(t2-(t1)/(double)(CLOCKS_PER_SEC))/1000); } system("pause") return 0; 請問Sleep()這函式 有沒有替代的函式可以用 或是甚麼其他寫法 希望最後也能夠是毫秒的印出 0.1 0.2 直到 1 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.249.111
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