delphi 多线程 界面 卡住的问题 ,求高手 帮助!
很简单的 线程,
功能是 在界面上显示 一个渐变 的数字 (从 0- 20000000)。
不知道为什么 我的 界面 会 卡住呢 ?
而我用的CreateThread 方法的 创建的 线程 就不会卡住呢 ?
百思不解啊 !
求 高手指点 :
代码如下:
// 继承自 Tthread 的 线程
TMyThreadEvent2=class(Tthread)
private
FDrawCanvas: TCanvas;
FDrawString: string;
procedure DarwText;
protected
procedure Execute;override;
public
constructor Create(CreateSuspended: Boolean);
destructor Destroy; override;
property DrawCanvas:TCanvas read FDrawCanvas write FDrawCanvas;
property DrawString:string read FDrawString write FDrawString;
end;
{ TMyThreadEvent2 }
constructor TMyThreadEvent2.Create(CreateSuspended: Boolean);
begin
inherited Create(CreateSuspended);
end;
procedure TMyThreadEvent2.DarwText;
var
i: Integer;
begin
if Length(trim(FDrawString))=0 then Exit;
if Assigned(FDrawCanvas) then
begin
FDrawCanvas.Lock;
for i := 0 to 2000000 do
begin
FDrawCanvas.TextOut(20,100,inttostr(i));
end;
FDrawCanvas.unLock;
end;
end;
destructor TMyThreadEvent2.Destroy;
begin
inherited;
end;
procedure TMyThreadEvent2.Execute;
begin
inherited;
DarwText;
end;
// 直接使用 CreateThread 方法
{创建线程}
procedure TForm1.Button2Click(Sender: TObject);
var
ThreadID: DWORD;
begin
CreateThread(nil, 0, @MyThreadFun, nil, 0, ThreadID);
end;
function MyThreadFun(p: Pointer): DWORD; stdcall;
var
i,y: Integer;
begin
Inc(f);
y := 20 * f;
for i := 0 to 2000000 do
begin
Form1.Canvas.Lock;
Form1.Canvas.TextOut(20, y, IntToStr(i));
Form1.Canvas.Unlock;
end;
Result := 0;
end;
想 问的是 到底是什么问题导致的啊?