在delphi中使用執行緒,當窗體關閉時,如果窗體中啟用了執行緒,一般需要手動關閉,以釋放資源。
常用來結束執行緒的**為:
pcmthrd.terminate;
pcmthrd.waitfor;
即先觸發terminate方法,然後等待執行緒的結束。
這種方法要求執行緒不能使用 freeonterminate := true; ,否則在waitfor即將結束的時候會引發「無效控制代碼」的錯誤。
這種方法在窗體關閉的時候會等待一段事件(因為waitfor)。
因此,如果不是在主窗體中結束執行緒時,其實我們可以不必使用waitfor。而是採用如下方法:
將freeonterminate := true;
這樣在窗體關閉的**中直接呼叫
pcmthrd.terminate;
即可。注意:
如果設定了
pcmthrd.onterminate := somefunction;
那麼在呼叫pcmthrd.terminate;前盡量將pcmthrd.onterminate := nil,以免結束執行緒後somefunction中的變數出現空指標錯誤。當然,這不是絕對的,需要根據具體程式而定。
delphi關於執行緒安全問題
tthread 提供了幾種同步的方法 tthread class protected procedure synchronize method tthreadmethod overload 在繼承中呼叫同步 public class procedure synchronize athread tth...
關於delphi 窯洞的關閉
我的老家在陝西渭北,祖祖輩輩住在窯洞裡,窯洞裡面冬暖夏涼,結實耐用,非常舒服。隨著新農村的改造,新蓋的樓房慢慢替代了古老的窯洞,剩下的窯洞漸漸越來越少人住了,也慢慢的荒涼起來,估計再過幾十年後,窯洞也就成了遺跡了。我從1998年開始建立delphi 窯洞 一直致力於推廣delphi 技術,由當時的個...
執行緒關閉 主線程和子執行緒的關閉
今天寫執行緒,再網頁上找了些關閉執行緒的栗子,給大家整理一下 多執行緒程式的開發中,啟動了多個執行緒的程式在關閉的時候卻出現了問題,如果程式退出的時候不關閉執行緒,那麼執行緒就會一直的存在,但是大多啟動的執行緒都是區域性變數,不能一一的關閉,如果呼叫thread.currentthread.abor...