Delphi 多執行緒使用(1)

2021-06-28 07:44:18 字數 1780 閱讀 1495

整理萬一部落格 執行緒學習 每個例子 均執行和使用 執行環境(我自己使用的是xe4,其他版本也可 )(附原始碼)

什麼是執行緒

vcl執行緒的使用

tthread類

屬性freeonterminate屬性(指定當執行緒終止時是否自動刪除執行緒物件 預設:false(有的書上說是 true,建議使用時候,直接賦值))

priority屬性 設定執行緒的優先順序

returnvalue屬性 當執行緒終止時,用該屬性為其他執行緒傳遞乙個返回值

suspended屬性,指明執行緒是否出於掛起狀態

terminated屬性,執行緒執行時,置為true,則應將執行緒終止

threadid 執行緒id

handle 執行緒控制代碼

方法doterminate方法-觸發onterminate事件

execute方法-建立執行緒必須實現的方法

resume 當執行緒物件處於暫停狀態時,呼叫此方法可以恢復執行緒執行

suspend 當執行緒執行時,呼叫此方法可以暫停執行緒執行

synchronize 避免多個執行緒同時操作乙個物件導致程式崩潰

terminate 終止執行緒

waitfor 等待執行緒物件的終止,並返回執行緒物件的returnvalue屬性值

舉例說明

unit unit1;

inte***ce

uses

winapi.windows, winapi.messages, system.sysutils, system.variants, system.classes, vcl.graphics,

vcl.controls, vcl.forms, vcl.dialogs, vcl.stdctrls;

type

tform1 = class(tform)

btn1: tbutton;

procedure btn1click(sender: tobject);

private

public

end;

var

form1: tform1;

implementation

type

tmythread = class(tthread)

protected

procedure execute; override;

end;

procedure tmythread.execute;

vari:integer;

begin

inherited;

for i := 0 to 100000 do

begin

//這段**還是加上

freeonterminate := true;

with form1.canvas do

begin

lock;

textout(10,10,inttostr(i));

unlock;

end;

end;

end;

procedure tform1.btn1click(sender: tobject);

begin

tmythread.create(false);

end;

end. 



Delphi中使用多執行緒

這些天在indy的阻塞式socket模型的強迫下,開始在delphi中使用多執行緒。總結了一些經驗,儘管非常膚淺 1 對於vcl的控制項 大部分vcl的控制項的方法和屬性是不能保證執行緒安全的。我粗淺的理解執行緒安全為如果這個函式同時被兩個執行緒呼叫時,由於內部的指令不能保證按順序 即中間插入其他執...

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