線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1450
推到 Plurk!
推到 Facebook!

Timter 觸發時間不準的問題

尚未結案
danielx2000
一般會員


發表:29
回覆:33
積分:22
註冊:2002-09-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-10-13 15:15:12 IP:61.218.xxx.xxx 未訂閱
Dear all: 請教各位,    1.我使用timer每隔一段時間執行一段程式(2000ms), 不過每次timer的啟動時間都不是很準,我想是因為系統的關係 有沒有解決的辦法? 2. 另外,我在程式裡有一段thread會處理一些背景的動作,其中有用到計時的功能 我沒有在裡面使用timer的 component, 而是用 windows API來解決,可是會讓thread一直處於迴圈,而讓CPU 處於工作的狀態,而用sleep的效果也不是很好,有沒有辦法降低thread空轉的辦法,最好是時間到才觸發.    
 procedure Thread_com.Execute;
 begin
  while not Terminated do 
  begin
    tmpTime := GetTickCount   50; //以 50ms 為一計時單位
    while tmpTime >= GetTickCount do
    begin
      if Terminated then break;
      sleep(10);
    end;        if (iCount50ms mod 5) = 0 then //250ms
    begin
     ...
    end;        if (iCount50ms mod 7) = 0 then //350ms
    begin
...
    end;     end;
end;
Tks
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-10-13 16:04:32 IP:147.8.xxx.xxx 未訂閱
1. Windows is not a Real Time OS, anyway... you may try to search for high precision timer.... 2. sleep more?
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-10-13 16:59:58 IP:210.61.xxx.xxx 未訂閱
TTimer是的運作概念類似於SetTimer裡WM_TIMER訊息 當計時觸發時, 向message queue丟一個wm_timer訊息 如果這時候message queue裡很多訊息, 越busy準確度就越低 所以要精準的Timer不能依賴TTimer元件 要從api著手, 詳細請查看陳寬達"delphi 深度歷險一書"有一章節 專門在講這個.
download
一般會員


發表:0
回覆:2
積分:0
註冊:2003-08-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-25 22:52:17 IP:61.61.xxx.xxx 未訂閱
在執行緒中 if(WaitForSingleObject(m_pThread[i]->m_hThread,2000) == WAIT_TIMEOUT){ // 2000ms 要執行的程式 }
系統時間:2024-11-23 11:34:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!