一个按钮1按下,触发了一个线程;在此线程结束前,另一按钮2按下,终止这个线程。按钮1click中写的是线程的create(false); ,按钮2click中写的是线程的doterminate;。然后程序就死了,我应该怎么做呢?
解决方案 »
- 着急,热心帮忙一下,高分求救,非常感谢!!!
- 求Delphi2007精简版下载
- 请问双击该程序类型文件时,就调用该程序打开该文件,该程序是怎么样得到刚才文件的路径的
- MS_SQL数据库用DOStoredProc怎么得到返回值
- 哪些对象需要create
- 一个有些挑战的问题(分数不够,可以再加)
- 如何在DateSet数据集中添加列Field
- 我有一个函数运行了很长时间,程序失去响应,怎么办?
- 请问,在SQLSERVER中有没有管理用户表的系统表。比如在ORACLE中就有SYS.USER_TABLE_COMMENTS等等的系统表
- 用程序控制NT服务的几个问题:
- 请教一个关于quickreprot的问题,急!
- delphi7控件代码分析中遇到的困惑!
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type
Tdd=class(tthread)
protected procedure execute;override;
procedure sss;
end;
TForm1 = class(TForm)
ProgressBar1: TProgressBar;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
dd:tdd;
procedure ss(sender:tobject);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ Tdd }procedure Tdd.execute;
begin
inherited;
self.FreeOnTerminate:=true;
self.OnTerminate:=form1.ss;
synchronize(self.sss);
end;procedure Tdd.sss;
var i:integer;
begin
while form1.ProgressBar1.Position<form1.ProgressBar1.Max do
begin
for i:=0 to 200000 do;
form1.ProgressBar1.StepIt;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
dd:=Tdd.Create(false);
end;procedure TForm1.ss(sender: tobject);
begin
self.ProgressBar1.Position:=0;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
dd.DoTerminate;
end;end.
帮忙了,各位高手
begin
synchronize(self.sss);
end;procedure Tdd.sss;
var i:integer;
begin
while not Tdd.Terminate do
begin
while form1.ProgressBar1.Position<form1.ProgressBar1.Max do
begin
for i:=0 to 200000 do
begin
form1.ProgressBar1.StepIt;
end;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
dd:=Tdd.Create(false);
dd.FreeOnTerminate:=true;
dd.OnTerminate:=form1.ss;
end;procedure TForm1.ss(sender: tobject);
begin
self.ProgressBar1.Position:=0;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
dd.DoTerminate;
end;end.你这样试试.其实我觉得你根本没必要用线程来实现这个功能.
begin
dd:=Tdd.Create(false);
end;procedure TForm1.Button2Click(Sender: TObject);
begin
freeandnil(dd);
end;
现在create的时候变为true,Button2Click按下的时候变为false,当线程变量变为
false是,线程主动退出,再freeandnil(dd);