Delphi 的多執行緒已經非常易用了《轉》

2022-08-17 03:54:17 字數 2990 閱讀 3952

先看乙個非多執行緒的例子, **執行時不能進行其它操作(譬如拖動窗體):

proceduremymethod;

var

i: integer;

begin

fori := 0

to500000

do

begin

form1.canvas.lock;

form1.canvas.textout(10, 10, inttostr(i));

form1.canvas.unlock;

end;

end;

proceduretform1.button1click(sender: tobject);

begin

mymethod;

end;

修改為多執行緒(只修改一行**):

proceduremymethod;

var

i: integer;

begin

fori := 0

to500000

do

begin

form1.canvas.lock;

form1.canvas.textout(10, 10, inttostr(i));

form1.canvas.unlock;

end;

end;

proceduretform1.button1click(sender: tobject);

begin

tthread.createanonymousthread(mymethod).start; //!!!

end;

**分析:

1、tthread 現在增加了許多 class 方法(直接通過類名呼叫的方法), tthread.createanonymousthread() 就是比較有用的乙個.

3、但 createanonymousthread 建立執行緒後是掛起的, 需要手動執行它; 後面的 start 方法就是用來喚醒執行緒的.

4、(以前)喚醒執行緒還可以使用 resume 方法或 suspended 屬性(suspended := false;); 但它們即將被廢棄了, 現在應使用 start 來啟動執行緒.

createanonymousthread 的引數型別 tproc 是匿名方法(reference), 所以**可以簡寫為:

proceduretform1.button1click(sender: tobject);

begin

tthread.createanonymousthread( //直接寫入方法體

procedure

var

i: integer;

begin

fori := 0

to500000

do

begin

canvas.lock;

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

canvas.unlock;

end;

end//此處無分號

).start;

end;

延時執行:

var

mythread: tthread;

proceduretform1.formcreate(sender: tobject);

begin

mythread := tthread.createanonymousthread(

procedure

var

i: integer;

begin

fori := 0

to500000

do

begin

canvas.lock;

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

canvas.unlock;

end;

end

);end;

proceduretform1.button1click(sender: tobject);

begin

mythread.start;

end;

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

delphi 多執行緒例項

下面筆者將介紹乙個簡單的例項,解釋和說明前面所述的內容。1 建立form,在其中建立兩個按鈕 開始採集 和 停止採集 新增乙個paintbox1。2 建立乙個新的單元,在其中輸入以下 unit collectthread inte ce uses classes,sysutils,stdctrls,...