代码如下:
先执行 Button2Click 然后执行 Button4Click 为什么 线程没执行函数 没有推出去 但是 执行 Button5Click 后 IsThreadTerminate 明显时 TRUE 的
拜求 高手执教 帮忙调试 unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TThreadProc = Procedure(const IsThreadTerminate : boolean) of object; TMyThread = class(TThread)
private
FIsThreadTerminate: boolean;
FThreadProc : TThreadProc;
protected
procedure Execute; Override;
public
constructor Create(ThreadProc : TThreadProc);OverLoad;
destructor destroy;override;
property IsThreadTerminate:boolean read FIsThreadTerminate write FIsThreadTerminate;
procedure TerminateThread;
end;
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit2: TEdit;
Button5: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
myThread: TMyThread;
procedure num(const IsThreadTerminate : boolean);
//procedure ONThreaddestroy;
public
{ Public declarations }
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.num(const IsThreadTerminate : boolean);
var
i,j: integer;
begin
j:= 0;
for i:= 0 to 100000 do
begin
if IsThreadTerminate then
begin
Edit2.Text:= '111111111111';
break;
end
else
Edit2.Text:= '2222222222222';
j:= j + 1;
Edit1.Text:= inttostr(j);
end;
end;procedure TMyThread.Execute;
begin
if Assigned(FThreadProc) then FThreadProc(FIsThreadTerminate);
end;constructor TMyThread.Create(ThreadProc : TThreadProc);
begin
FThreadProc:= ThreadProc; FreeOnterminate := TRUE; FIsThreadTerminate:= FALSE; Inherited Create(FALSE);end;destructor TMyThread.destroy;
beginend;procedure TMyThread.TerminateThread;
beginend;procedure TForm1.Button2Click(Sender: TObject);
begin
myThread:= TmyThread.Create(num);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
myThread.Resume;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
myThread.Suspend;
end;procedure TForm1.Button4Click(Sender: TObject);
begin
myThread.Suspend; //设置IsThreadTerminate 为TRUE 让线程自动结束
myThread.IsThreadTerminate:= TRUE;
end;procedure TForm1.Button5Click(Sender: TObject);
begin
//测试 IsThreadTerminate 是否为TRUE
if myThread.IsThreadTerminate then
showmessage('111');
end;end.
先执行 Button2Click 然后执行 Button4Click 为什么 线程没执行函数 没有推出去 但是 执行 Button5Click 后 IsThreadTerminate 明显时 TRUE 的
拜求 高手执教 帮忙调试 unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TThreadProc = Procedure(const IsThreadTerminate : boolean) of object; TMyThread = class(TThread)
private
FIsThreadTerminate: boolean;
FThreadProc : TThreadProc;
protected
procedure Execute; Override;
public
constructor Create(ThreadProc : TThreadProc);OverLoad;
destructor destroy;override;
property IsThreadTerminate:boolean read FIsThreadTerminate write FIsThreadTerminate;
procedure TerminateThread;
end;
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Edit2: TEdit;
Button5: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
myThread: TMyThread;
procedure num(const IsThreadTerminate : boolean);
//procedure ONThreaddestroy;
public
{ Public declarations }
end;
var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.num(const IsThreadTerminate : boolean);
var
i,j: integer;
begin
j:= 0;
for i:= 0 to 100000 do
begin
if IsThreadTerminate then
begin
Edit2.Text:= '111111111111';
break;
end
else
Edit2.Text:= '2222222222222';
j:= j + 1;
Edit1.Text:= inttostr(j);
end;
end;procedure TMyThread.Execute;
begin
if Assigned(FThreadProc) then FThreadProc(FIsThreadTerminate);
end;constructor TMyThread.Create(ThreadProc : TThreadProc);
begin
FThreadProc:= ThreadProc; FreeOnterminate := TRUE; FIsThreadTerminate:= FALSE; Inherited Create(FALSE);end;destructor TMyThread.destroy;
beginend;procedure TMyThread.TerminateThread;
beginend;procedure TForm1.Button2Click(Sender: TObject);
begin
myThread:= TmyThread.Create(num);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
myThread.Resume;
end;procedure TForm1.Button3Click(Sender: TObject);
begin
myThread.Suspend;
end;procedure TForm1.Button4Click(Sender: TObject);
begin
myThread.Suspend; //设置IsThreadTerminate 为TRUE 让线程自动结束
myThread.IsThreadTerminate:= TRUE;
end;procedure TForm1.Button5Click(Sender: TObject);
begin
//测试 IsThreadTerminate 是否为TRUE
if myThread.IsThreadTerminate then
showmessage('111');
end;end.
解决方案 »
- Delphi中对证书的基本操作如何实现
- 程序启动连数据库时如何做一个Splash窗口????
- 求在treeview中遍历特定文件夹下的文件夹和文件的递归函数?急!多谢!
- 郁闷!delphi7中选择project/options,出现内存错....
- Dcom多层结构访问数据库速度变慢怎么解决?请高手赐教!
- 三层问题
- 现在找工?!大家谈谈自己的找工经验?! 另:广州那边的工作好找么?!
- 过节了,明天准备加班的同胞们辛苦了,有关D5和D7的性能对比说来听听,看换D7是否值呢?
- 怎样将word文档转换为图象图像
- 熟悉Treeview(.data属性)的高手请进!!!!
- 关于一个小型印刷业资源管理系统的框架?
- 请教一个关于fastreport的问题?每页的行号从1开始,并把这页的总行数显示到页面的底部?
Inherited Create(FALSE);