TMyThread = class(TThread)
private
HandleFrm : integer;
step : integer;
public
constructor Create(handle:integer);
procedure Execute; override;end;
constructor TMyThread.Create(handle:integer);
begin
HandleFrm := handle;
FreeOnTerminate := True;
inherited Create(false);
end;
procedure TMyThread.Execute;
var
i : integer;
begin
inherited;
for i:= 0 to 10000 do
begin
step := i;
if step = 5000 then
begin
SendMessage(HanldeFrm,WM_SYSCOMMAND,SC_MINIMIZE,0);
//满足条件时发送消息,可以自己定制消息,然后在对应的文件实现消息处理函数
exit;//当然不一定退出;
end;
do sth;
end;
///////////////////////////////////////////////////////////////////////////
关于Form1的定义;
private
{ Private declarations }
ThreadCount : integer;
procedure ThreadDone(Sender: TObject);
.......
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i:=0 to ThreadCount - 1 do
begin
with TMythread.Create(Form1.handle) do
OnTerminate := ThreadDone;
end;
procedure TForm1.ThreadDone(Sender :TObject);
begin
Dec(ThreadCount);
if (ThreadCount = 0) then
ShowMessage('All Threads have been done!');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ThreadCount := 20;
end;
希望对你有所帮助!!!!

解决方案 »

  1.   

    pathe(睡斛)兄的程序里不要定义线程的实例么,
    直接with TMythread.Create(Form1.handle) do就行?
      

  2.   

    with TMythread.Create(Form1.handle) do
    就是创建一个实例了,这种好处是不用声明变量了另线程是应用程序的一个控制流程,进程的一条执行路径
    每一个进程都有一个主线程
    CPU会根据线程的优先级分配时间片给相应的线程
    从而控制线程的执行时机