請問有其他類似Timer的觸發元件可用嗎 |
答題得分者是:RootKit
|
frog1
一般會員 發表:25 回覆:40 積分:18 註冊:2007-01-24 發送簡訊給我 |
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 發送簡訊給我 |
|
frog1
一般會員 發表:25 回覆:40 積分:18 註冊:2007-01-24 發送簡訊給我 |
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 發送簡訊給我 |
>Timer的時間觸發, 是會因CPU 是否忙而影響,
這跟你的 Main-Thread 中,訊息的傳遞或操作延誤有關。 可建立一Thread 處理計時部分,避免與主執行緒干擾。 >但可能是因Delay的時間到了就執行下一次的指令, 而上次的指令尚未執行完成而一直出現錯誤... 您的程式必須考慮 multi-Thread 環境。一個還沒執行完畢另一個又執行。 有些變數或指針是否同時處理。當然會有錯誤! 重點在於"從監視器取像後顯示在營幕並存檔"這個Procedure,能不能同時運行。 若能 Multi-Thread 就沒有問題。 |
frog1
一般會員 發表:25 回覆:40 積分:18 註冊:2007-01-24 發送簡訊給我 |
Hi, RootKit
>Timer的時間觸發, 是會因CPU 是否忙而影響, 這跟你的 Main-Thread 中,訊息的傳遞或操作延誤有關。 可建立一Thread 處理計時部分,避免與主執行緒干擾。 -->可否再講詳細一點 >但可能是因Delay的時間到了就執行下一次的指令, 而上次的指令尚未執行完成而一直出現錯誤... "從監視器取像後顯示在營幕並存檔"這個Procedure,因是同一連續動作, 必需在一流程上完成 而用TcairnTimer, 可能是上一次程序在存時, 時間就到了, 啓動下一個程序, 使得原來有用到的Stream被破壞掉 事實上, 覺得現用Edit Thread的作法可以用, 但Loading好像重了許多, 如有更好的方式, 請指點 謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |