全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1607
推到 Plurk!
推到 Facebook!

為什麼每次程式執行的時間都不一樣

 
ciy
一般會員


發表:10
回覆:19
積分:5
註冊:2006-10-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-03 17:21:49 IP:140.121.xxx.xxx 訂閱
<textarea class="cpp" rows="10" cols="60" name="code">#include #include int a = 0; HANDLE hEvent = CreateEvent(NULL, false, false, NULL); int TimerID = timeSetEvent(1, 0, (LPTIMECALLBACK)hEvent, 0, TIME_PERIODIC | TIME_CALLBACK_EVENT_SET); do { WaitForSingleObject(hEvent, INFINITE); Application->ProcessMessages(); Canvas->TextOut(400, 300, a); ////////////////////// // 放置主要程式碼 // a ; ////////////////////// } while (a <= 10000); </textarea><br />
以上是我用的MMTimer
想請問說
為什麼每次執行的時間都不一樣?
比方說:第一次執行只花個0.05秒
執行第二次時,只花0.06秒
大約在0.09~0.01跳動
是這個MMTimer不準嗎?
還是有更好的方式取代?
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-04 14:14:01 IP:220.134.xxx.xxx 訂閱
因為有  Application->ProcessMessages(); 就一定不會準
就算沒有
Application->ProcessMessages(),Windows 也不保證準
可以確定的是沒有
Application->ProcessMessages() 會比較準一些,但不可能達到您要求的絕對準,因為 Windows 不是 Real Time OS。
------
http://www.ViewMove.com
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-04 15:34:08 IP:210.241.xxx.xxx 訂閱
就算沒有Application->ProcessMessages()也一樣
因為Windows中不是只有一個程式在跑
就算拋開軟體問題, 硬體還有 cache 存在
所以執行時間不相同是正常的

多測試幾次, 取平均值當作是執行時間就好
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
system72
中階會員


發表:15
回覆:114
積分:55
註冊:2005-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-05 14:46:50 IP:219.81.xxx.xxx 訂閱
在  windows上,

測程式跑多久,不適合直接去測 0.x 或 0.0x 秒,


加大次數,

讓程式跑久一點,比方跑個 95 秒 -105秒,

(不然,最少也要10秒吧)

這樣誤差跳動幅度比例,就沒那麼高.



===================引 用 文 章===================
<textarea class="cpp" rows="10" cols="60" name="code">#include #include int a = 0; HANDLE hEvent = CreateEvent(NULL, false, false, NULL); int TimerID = timeSetEvent(1,???? 0,???? (LPTIMECALLBACK)hEvent, 0, TIME_PERIODIC | TIME_CALLBACK_EVENT_SET); do { WaitForSingleObject(hEvent, INFINITE); Application->ProcessMessages(); Canvas->TextOut(400, 300, a);???????????? ////////////////////// // 放置主要程式碼 // a ;???????????????????????????????????? ////////////////////// } while (a <= 10000); </textarea><br />
以上是我用的MMTimer
想請問說
為什麼每次執行的時間都不一樣?
比方說:第一次執行只花個0.05秒
執行第二次時,只花0.06秒
大約在0.09~0.01跳動
是這個MMTimer不準嗎?
還是有更好的方式取代?
ciy
一般會員


發表:10
回覆:19
積分:5
註冊:2006-10-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-04-05 20:24:33 IP:140.121.xxx.xxx 訂閱
了解 ^~^
謝謝各位的回答
系統時間:2024-05-03 21:54:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!