如何終止一個正在執行中的函數? |
尚未結案
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
目前我寫了一個函數,全部執行結束要花一分多鐘,因些想寫一個按鈕讓使用者可以中途停止,想到了兩個方法:
1. 加上一個停止的旗標,之後在這個函數的每一行都去判斷旗標是否設為停止,若是則return,但這個寫法很爛,因為函數不是一個迴圈,所以必須只好在每一行去判斷。
2. 用thread,將這個函數用thread是實現它,若使用者按下停止鈕,則將thread終止,可是現在卻不知道要如何讓thread終止?只知道Resume()跟Suspend()的用法,看了站上的例子都是一些迴圈,像while(!Terminated),再用Terminate()去終止它,可是我的函數並非迴圈,想請教一下站上的大大,我該如何作呢?感激不盡!
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
引言: 目前我寫了一個函數,全部執行結束要花一分多鐘,因些想寫一個按鈕讓使用者可以中途停止,想到了兩個方法: 1. 加上一個停止的旗標,之後在這個函數的每一行都去判斷旗標是否設為停止,若是則return,但這個寫法很爛,因為函數不是一個迴圈,所以必須只好在每一行去判斷。 2. 用thread,將這個函數用thread是實現它,若使用者按下停止鈕,則將thread終止,可是現在卻不知道要如何讓thread終止?只知道Resume()跟Suspend()的用法,看了站上的例子都是一些迴圈,像while(!Terminated),再用Terminate()去終止它,可是我的函數並非迴圈,想請教一下站上的大大,我該如何作呢?感激不盡! >>< face="Verdana, Arial, Helvetica"> hornacek你好 第二個方法在實作上和第一個方法其實也大同小異,要在Execute()中穿插數個if(Terminated)return;判斷式(這麼看來,第一個方法和第二個方法,只差在有沒有用到TTread),我記得bcb的help是這麼寫的...不知道還有沒有更高明的作法呢? |
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
引言: thread可隨時用Terminate()去終止它, 在停止鈕加入thread->Terminate();即可。anpino你好: 請問你用的是TThread嗎?WIN API只有TerminateThread,沒有Terminate,用法也不同。請問是要找MSDN中找那一篇文章呢? 如果是TThread的Terminate()就我所知,如果沒在Execute中檢查Terminated變數並return。Terminate()是沒有作用的。並不是停止鈕中加入thread->Terminate();即可。 void __fastcall Terminate(void); Description Terminate sets the thread? Terminated property to true, signaling that the thread should be terminated as soon as possible. For Terminate to work, the thread's Execute method and any methods that Execute calls should check Terminated periodically and exit when it's true. 發表人 - pwipwi 於 2004/05/13 18:03:16 |
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
引言: anpino你好: 請問你用的是TThread嗎?WIN API只有TerminateThread,沒有Terminate,用法也不同。請問是要找MSDN中找那一篇文章呢? 如果是TThread的Terminate()就我所知,如果沒在Execute中檢查Terminated變數並return。Terminate()是沒有作用的。並不是停止鈕中加入thread->Terminate();即可。pwipwi你好: 謝謝你的指導&提醒。 我都是用 > ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖 |
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
|
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
引言: 原來如此,那這樣說來Borland包的那個thread,其實功能很遜囉!因為之所以要用thread就是希望能隨時停止它,若還要去判斷Terminated這個屬性的話,實在是有些多此一舉,那只好來研究研究API的thread似乎比較有意義...謝啦!不客氣。< > 重新包裝並不代表很遜啦< >, 只是比較user friendly而已。缺點是掌控性不高。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D ------------------------------- 發表人 - anpino 於 2004/05/17 08:48:27 |
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
|
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
|
hornacek
一般會員 發表:29 回覆:76 積分:21 註冊:2004-02-02 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |