在CSDN中找到的例子,自己测试了一下。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TCheckExternalButtonThread = class(TThread)
private
{ Private declarations }
FTimer:TTimer;
procedure TimerProc(Sender: TObject);
procedure KillIt;
protected
procedure Execute;override;
public
ThreadNo:THandle;
constructor Create();
end;
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
ss:TCheckExternalButtonThread ;
implementation
{$R *.dfm}
constructor TCheckExternalButtonThread.Create();
begin
inherited Create(False);
end;
procedure TCheckExternalButtonThread.KillIt;
begin
PostThreadMessage(ThreadNo,WM_QUIT,0,0);
end;
procedure TCheckExternalButtonThread.TimerProc(Sender: TObject);
begin
Form1.Memo1.Lines.Add('asdasf');
end;
procedure TCheckExternalButtonThread.Execute;
var MsgRec:TMsg;
begin
FTimer:=TTimer.Create(nil);
try
FTimer.Enabled:=True;//需要用的时候Enabled设置为True即可。
FTimer.OnTimer:=TimerProc;
FTimer.Interval:=100;
while GetMessage(MsgRec, 0, 0, 0) do begin
TranslateMessage(MsgRec);
DispatchMessage(MsgRec)
end;
Terminate;
finally
FTimer.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ss:=TCheckExternalButtonThread.Create;
ss.ThreadNo:=ss.ThreadID;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ss.KillIt;
end;
end.