Delphi中使用多執行緒

2021-09-08 15:16:04 字數 625 閱讀 6888

這些天在indy的阻塞式socket模型的強迫下,開始在delphi中使用多執行緒。總結了一些經驗,儘管非常膚淺:

1、對於vcl的控制項

大部分vcl的控制項的方法和屬性是不能保證執行緒安全的。我粗淺的理解執行緒安全為如果這個函式同時被兩個執行緒呼叫時,由於內部的指令不能保證按順序(即中間插入其他執行緒的指令執行)的執行,導致**邏輯發生錯誤。

vcl自身給tthread提供了synchronize函式,讓使用者用這個函式**呼叫需要操作vcl的函式。根據網友的文章,其實synchronize就是通過windows的訊息把這個**呼叫的資訊傳送給主線程,然後讓主線程來執行這個函式。並且在synchronize執行時是等待著的,只有主線程有空處理這個訊息並在處理完後synchronize才會執行完畢。

2、對於自己的函式

自己寫的函式是不能讓synchronize來幫助你處理執行緒安全的問題。回憶執行緒安全問題的根本起源就是寫的時候假定了函式只被乙個執行緒呼叫,從而內部的指令都是一條挨著一條順序執行的。解決這個問題的辦法有很多,加鎖解鎖就是乙個。

3、總結

所以要保證執行緒安全,1、函式自身提供保護措施,2、呼叫者恪守規矩,不去碰這些函式,或者用比較繞的方式去用這些函式。對於自己寫函式要執行緒安全,最好用第乙個辦法,對於vcl我們只能守好規矩了。

Delphi 多執行緒使用(1)

整理萬一部落格 執行緒學習 每個例子 均執行和使用 執行環境 我自己使用的是xe4,其他版本也可 附原始碼 什麼是執行緒 vcl執行緒的使用 tthread類 屬性freeonterminate屬性 指定當執行緒終止時是否自動刪除執行緒物件 預設 false 有的書上說是 true,建議使用時候,直...

delphi 多執行緒

摘自 萬一的部落格 functionmyfun p pointer integer stdcall var i integer begin fori 0to500000do begin form1.canvas.lock form1.canvas.textout 10,10,inttostr i f...

delphi 多執行緒

看別人的部落格一萬次記憶效果也沒那麼好,還是自己動手寫寫吧!functioncreatethread lpthreadattributes pointer dwstacksize dword lpstartaddress tfnthreadstartroutine lpparameter point...