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

請問有其他類似Timer的觸發元件可用嗎

答題得分者是:RootKit
frog1
一般會員


發表:25
回覆:40
積分:18
註冊:2007-01-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-08 18:17:43 IP:219.86.xxx.xxx 訂閱
Hi, 前輩們
我有一程式, 其中有二個Timer,
一為從監視器取像後顯示在營幕並存檔, 需100ms取像一次, 作業時間約為50ms,
另一Timer 800做一次計算, 計算時間約為300ms,
我分成二個Form , 每個From都在裏面放了個Timer, 以各別啓動需要的程序
但再怎麼設, 每秒鐘所存下來的檔案都只有6-7個, 去讀取每個程序的執行時間, 都在預想中(50ms)
後設法讀取每個Timer的啓動時間, 發現Timer結束, 到下一次 起來中間停了100-300ms,
應是受第二個Timer影響

到K_TOP找了許多資料終於知道, Timer的時間觸發, 是會因CPU 是否忙而影響,
也有查到用 GetTickCount 之類的WINAP, 但這會用到LOOP判定時間是否到了
而只要用到LOOP, 可能是忙著處理LOOP的計算, 所取得的圖像會依時間存下來, 但完全不會顯示在營幕上

試了許久, 都無法解決, 想請前輩們指點, 我可以如何處理, 或那裏有較好的時間觸發元件可用

RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-08 20:09:28 IP:122.126.xxx.xxx 訂閱
提供建議:
自己寫 Thread 控制或用三方元件 TCairnTimer。
frog1
一般會員


發表:25
回覆:40
積分:18
註冊:2007-01-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-09 14:50:36 IP:219.81.xxx.xxx 訂閱
Hi,
感謝RootKit的指點
有到網站下載 TCairnTimer 試用, 但可能是因Delay的時間到了就執行下一次的指令, 而上次的指令尚未執行完成而一直出現錯誤
後改用EDIT 加Thread, 可以作業

我的作法大約是如此
加一個EDIT, Visible設為False
Thread一開始將EDIT.TEXT := 'N' , 再計算時間, 時間到後將EDIT.TEXT := 'Y'
原來ONTIME的東東放於EDIT ONCHANGE中, 並於ONCHANGE中加 IF EDIT.TEXT = 'N' Then EXIT, 並在最後call Thread
讓每次時間到時改變EDIT的值, 而應用ONCHANGE觸發工作, 程序完成後再呼叫Thread, 使形成LOOP, 又可控制停駐的時間來顯示資料

不知前輩們是否還有更好的方式, 或是有此困擾的我可以給源始碼


RootKit
資深會員


發表:16
回覆:358
積分:419
註冊:2008-01-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-09-09 15:57:39 IP:61.222.xxx.xxx 訂閱
>Timer的時間觸發, 是會因CPU 是否忙而影響,
這跟你的 Main-Thread 中,訊息的傳遞或操作延誤有關。
可建立一Thread 處理計時部分,避免與主執行緒干擾。

>但可能是因Delay的時間到了就執行下一次的指令, 而上次的指令尚未執行完成而一直出現錯誤...
您的程式必須考慮 multi-Thread 環境。一個還沒執行完畢另一個又執行。
有些變數或指針是否同時處理。當然會有錯誤!

重點在於"從監視器取像後顯示在營幕並存檔"這個Procedure,能不能同時運行。
若能 Multi-Thread 就沒有問題。


frog1
一般會員


發表:25
回覆:40
積分:18
註冊:2007-01-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-09-09 17:24:49 IP:219.81.xxx.xxx 訂閱
Hi, RootKit
>Timer的時間觸發, 是會因CPU 是否忙而影響,
這跟你的 Main-Thread 中,訊息的傳遞或操作延誤有關。
可建立一Thread 處理計時部分,避免與主執行緒干擾。
-->可否再講詳細一點


>但可能是因Delay的時間到了就執行下一次的指令, 而上次的指令尚未執行完成而一直出現錯誤...
"從監視器取像後顯示在營幕並存檔"這個Procedure,因是同一連續動作, 必需在一流程上完成
而用TcairnTimer, 可能是上一次程序在存時, 時間就到了, 啓動下一個程序, 使得原來有用到的Stream被破壞掉

事實上, 覺得現用Edit Thread的作法可以用, 但Loading好像重了許多, 如有更好的方式, 請指點

系統時間:2024-05-08 8:32:36
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!