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

如何中止程序

答題得分者是:Justmade
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-06 16:11:04 IP:61.66.xxx.xxx 未訂閱
請問各位! 我有一支 PAS, 假設有 procedure A procedure B function C 我在 Form1.onkeydown 有設置一個flag if key=VK_F12 then stopRun:= True; 當我程式在 procedure A中執行, 如何在stoprun為True時, 立即結束 procedure A 的執行, 不論 procedure A 目前執行到那一列! 同理在 procedure B 中執行中, 也是可以偵測 stopRun值而中斷 ps:在proceudre 中有 for..next, do...while, ...repeat...等等很多指令
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-06 16:40:18 IP:218.16.xxx.xxx 未訂閱
若你的 procedureA, procedureB 當中沒有使用 Application.ProcessMessages 等指令去將執行權交給 Application 去處理別的事項,即使使用者在中途按 F12 你那句 StopRun := true 都一直不會執行 直到 procedureA / B 及呼叫它的程式執行完才會處理下個事件如 按 F12 的事件等等,所以在執行完成前 StopRun 跟本就未被設定成 true。 所以,若是procedureA / B 是費時的操作而你想使用者能中止操作,一般都是在迴圈中使用 Application.ProcessMessages; if StopRun then exit; 這也可以使Form 的其他元件對使用者有反應否則就像死了一樣。 至於無論執行到那一行即停呢,除非你每一行都加上上述兩句否則應是不行的。 發表人 - Justmade 於 2003/04/06 16:41:38
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-07 20:37:33 IP:61.66.xxx.xxx 未訂閱
引言: 若你的 procedureA, procedureB 當中沒有使用 Application.ProcessMessages 等指令去將執行權交給 Application 去處理別的事項,即使使用者在中途按 F12 你那句 StopRun := true 都一直不會執行 直到 procedureA / B 及呼叫它的程式執行完才會處理下個事件如 按 F12 的事件等等,所以在執行完成前 StopRun 跟本就未被設定成 true。 所以,若是procedureA / B 是費時的操作而你想使用者能中止操作,一般都是在迴圈中使用 Application.ProcessMessages; if StopRun then exit; 這也可以使Form 的其他元件對使用者有反應否則就像死了一樣。 至於無論執行到那一行即停呢,除非你每一行都加上上述兩句否則應是不行的。 發表人 - Justmade 於 2003/04/06 16:41:38
當然我有加 Application.ProcessMesage囉, 因為以前 basic 有一個 on Escape goto ... 的方法可以中止到指定位置, 在 clipper時代也可 以做的到, 而在Delphi中, 我目前的案子會用到這樣的功能, 現在我的設計 也是如Justmade兄所說的, 在每一個迴圈內加入判斷值來跳出 (exit), 我 只是想是否有更好的方法可以取得中斷值來直接處理!
cooper
一般會員


發表:17
回覆:41
積分:11
註冊:2002-03-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-09 19:14:36 IP:61.231.xxx.xxx 未訂閱
引言: 當然我有加 Application.ProcessMesage囉, 因為以前 basic 有一個 on Escape goto ... 的方法可以中止到指定位置, 在 clipper時代也可 以做的到, 而在Delphi中, 我目前的案子會用到這樣的功能, 現在我的設計 也是如Justmade兄所說的, 在每一個迴圈內加入判斷值來跳出 (exit), 我 只是想是否有更好的方法可以取得中斷值來直接處理!
把 procedure A/B 要做的事都丟到別的 thread 去做 ~ 然後當 main thread 遇到 F12 時就把 該 thread 停掉, 您覺得如何 ?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-10 14:33:59 IP:61.66.xxx.xxx 未訂閱
引言: 把 procedure A/B 要做的事都丟到別的 thread 去做 ~ 然後當 main thread 遇到 F12 時就把 該 thread 停掉, 您覺得如何 ?
我沒有做過thread的經驗, 而且程式中運用十分多的功能, 有攝影, 遠端存檔, 影像擷取, ftp傳檔...十分複雜, 所以我不知道這段程式是否有可能可以轉到 thread中執行, 以及thread是否可以執行這麼複雜的運行, 本段的code我約略 算了一下一共有近6000行, 這個可能要花十分龐大的時間來研究才會有結果囉~ 發表人 - P.D. 於 2003/04/10 14:35:27
系統時間:2024-05-04 0:24:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!