先看乙個非多執行緒的例子, **執行時不能進行其它操作(譬如拖動窗體):
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;
延時執行:
varmythread: 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,...