delphi使用多執行緒時,介面死鎖

2021-05-22 18:28:54 字數 2248 閱讀 5087

以下為例子:

unit unit1;

inte***ce

uses

windows

, messages

, sysutils

, variants

, classes

, graphics

, controls

, forms

,dialogs

, stdctrls

, extctrls

;type

tform1

=class

(tform

)button1

: tbutton

;procedure button1click

(sender

:tobject);

private

public

end;

varform1

: tform1

;implementation

uses

unit2

; procedure tform1

.button1click

(sender

:tobject);

var i

:integer;

panel

: tpanel

;begin

for i

:=0to8do

begin

panel

:= tpanel

.create

(self);

panel

.parent:=

self;

panel

.top:

= i

*20;

panel

.left

:= i

*50;

panel

.width:=

50;panel

.caption:=

inttostr

(i );

thread

.create

(panel

); end;

end;

end.

unit unit2

;inte***ce

uses

classes

, extctrls

, sysutils

;type

thread

=class

(tthread

)private

i :

integer;

fpanel

: tpanel

;protected

procedure execute

;override;

procedure update

;public

constructor create

(panel

: tpanel

); end;

implementation

procedure thread

.update;

begin

fpanel

.caption:=

inttostr

(i );

fpanel

.refresh;

end;

procedure thread

.execute;

begin

i :=0

; while

not terminated

dobegin

//如無sleep,則當執行緒超過1個的話,介面就會死鎖。

sleep(1

);//也可不用synchronize,但關閉時,要處理執行緒。

synchronize

(update

); // update;

inc(i );

end;

end;

constructor thread

.create

(panel

: tpanel

); begin

freeonterminate

:=true;

fpanel

:= panel

;inherited create

(false);

end;

end.

Delphi 多執行緒使用(1)

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

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