Delphi執行緒的安全關閉

2021-04-18 21:02:59 字數 593 閱讀 4871

在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...