| unit TChildThread; interface uses Classes,Messages,Windows,SysUtils; const MAX_LEN = 260; type TChildThreads = class(TThread) private { Private declarations } protected procedure Execute; override; //同步函数的声明 procedure UpdateData; public szName : array[0..MAX_LEN] of Char; nIndex : Integer; end; implementation uses Unit1; { Important: Methods and properties of objects in VCL or CLX can only be used in a method called using Synchronize, for example, Synchronize(UpdateCaption); and UpdateCaption could look like, procedure TChildThread.UpdateCaption; begin Form1.Caption := 'Updated in a thread'; end; } { TChildThread } //同步函数的实现 procedure TChildThreads.UpdateData; begin Form1.ShowData.Items.Add(PChar(@szName)); end; procedure TChildThreads.Execute; begin { Place thread code here } //调用同步过程 Synchronize(UpdateData); end; end. |
| procedure TForm1.StartThreadsClick(Sender: TObject); var oChildThread : array[0..1000] of TChildThreads; i : Integer; begin For i := 0 to 1000 do begin oChildThread[i] := TChildThreads.Create(true); //注意这里的代码与消息同步中的顺序。 oChildThread[i].nIndex := i; strcopy(@oChildThread[i].szName,PChar('Child' + IntToStr(i))); oChildThread[i].Resume; end; end; |
===============================================
另一个例子:http://topic.csdn.net/t/20011015/02/323001.html
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Image1: TImage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyThread = class(TThread)
private
child : TComponent;
public
procedure draw;
constructor Create(parent : TComponent);
procedure Execute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TMyThread }
constructor TMyThread.Create(parent: TComponent);
begin
child := parent;
inherited Create(false);
end;
procedure TMyThread.draw;
begin
if (child is TEdit) then
begin
(child as TEdit).Text := 'OK';
end
else if(child is TImage) then
begin
(child as TImage).Canvas.Brush.Color := clBlue;
(child as TImage).Canvas.FillRect(rect(0,0,100,100));
end;
end;
procedure TMyThread.Execute;
begin
inherited;
synchronize(draw);
if Terminated then Exit;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TMythread.Create(Edit1);
TMythread.Create(image1);
end;
end.