先贴代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TMyThread = class(TThread)
private
protected
procedure Run;
procedure Execute; override;
{ Private declarations }
public
{ Public declarations }
end;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
processing : Boolean;
MyThread1: TMyThread;
Mythread2: TMyThread;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TMyThread.Run;
var
i, maxnum:Integer;
begin
for I := 1 to maxnum do
begin
Form1.Memo1.Lines.Add(IntToStr(i));
end;
end;
procedure TMyThread.Execute;
var
i, maxnum:Integer;
begin
maxnum := 1000;
for I := 1 to maxnum do
begin
Form1.Memo1.Lines.Add(IntToStr(i));
end;
Form1.MyThread1.Terminate; //关闭线程,如果没有这个步骤,程序将无法关闭。
Form1.MyThread2.Terminate; //关闭线程,如果没有这个步骤,程序将无法关闭。
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Processing := True;
MyThread1 := TMyThread.Create(True); //创建时不启动线程
MyThread2 := TMyThread.Create(True); //创建时不启动线程
MyThread1.FreeOnTerminate := True; //结束时自动释放
MyThread2.FreeOnTerminate := True; //结束时自动释放
MyThread1.Resume;
MyThread2.Resume;
end;
end.
解析部分(我学习时遇到的问题)
type
TMyThread = class(TThread)
private
protected
procedure Run;
procedure Execute; override;
{ Private declarations }
public
{ Public declarations }
end;
这部分我早期学习的时候,会直接把下方的Form1部分的Type替换成这段,其实Type是这两个独立的部分的声明。是并存的,也是应该都存在的。
MyThread1 := TMyThread.Create(True); //我在其他的地方看到的都是好多参数的创建,试了都好像有问题,也有点没搞明白。(比如:CreateThread(nil, 0, @MyFun, nil, 0, ID); 这个我一直调用没成功,MyFun是一个函数)
Form1.MyThread1.Terminate; //关闭线程,如果没有这个步骤,程序将无法关闭。
这一句是我发现我使用了线程以后。软件无法正常关闭,发现没有进行关闭线程。
最后是发现了一个问题,不太明白为什么?
最后的233比232更早Add,想不同是为什么