TThreadOracle = class(TThread) { 声明线程类 }
private
procedure xxx(); { 测试用函数 } protected
procedure Execute; override;{ 执行线程的方法 }
public
constructor Create(); virtual; { 线程构造器 }
end;function MyThreadfunc():integer;
var
a,i,j:INteger;
begin
ShowMessage('开始多线程');
// Gauge2.MaxValue:=100000;
//FProgressbar.Max:=100000;
for i:=0 to 100000 do
for j:=0 to 100000 do
a:=i+j;
ShowMessage('结束多线程');Procedure TThreadOracle.Execute;
begin
if not Terminated then
try XXX(); { 打开查询 } except
Application.MessageBox('线程异常','错误',MB_OK+MB_IconError);
end; end;Constructor TThreadOracle.Create();
begin
inherited Create(True);
FreeOnTerminate := False; end;//执行操作按钮procedure Tfrm1.btnStartClick(Sender: TObject);
var
Q:TThreadOracle;begin Q:=TThreadOracle.Create();
Q.Execute;
Q.Terminate;
Q.Destroy;
end;一点start,界面就死,我实在是用了线程,怎么界面还是死呢?!!
到底要我怎样做才不会死界面,或者是说,还能相应其他的消息。
private
procedure xxx(); { 测试用函数 } protected
procedure Execute; override;{ 执行线程的方法 }
public
constructor Create(); virtual; { 线程构造器 }
end;function MyThreadfunc():integer;
var
a,i,j:INteger;
begin
ShowMessage('开始多线程');
// Gauge2.MaxValue:=100000;
//FProgressbar.Max:=100000;
for i:=0 to 100000 do
for j:=0 to 100000 do
a:=i+j;
ShowMessage('结束多线程');Procedure TThreadOracle.Execute;
begin
if not Terminated then
try XXX(); { 打开查询 } except
Application.MessageBox('线程异常','错误',MB_OK+MB_IconError);
end; end;Constructor TThreadOracle.Create();
begin
inherited Create(True);
FreeOnTerminate := False; end;//执行操作按钮procedure Tfrm1.btnStartClick(Sender: TObject);
var
Q:TThreadOracle;begin Q:=TThreadOracle.Create();
Q.Execute;
Q.Terminate;
Q.Destroy;
end;一点start,界面就死,我实在是用了线程,怎么界面还是死呢?!!
到底要我怎样做才不会死界面,或者是说,还能相应其他的消息。
解决方案 »
- delphi怎么去掉MDI主窗体中子窗体的蓝条?
- 高手帮忙看看错误,invalid pointer operation
- delphi读取excel
- festreport中怎么引用变量值。
- 请教高手,如何实现MSN主界面左上角的"隐藏/显示窗口框架"功能???
- 请问如何改变Project1.exe运行后,在windows底下状态栏的题目名称,form.caption已经设置了,但只是 windows的上边变成我设置的了,底下
- 超级简单问题!!!只有Dcu而没有PAS文件的VCL控件如何安装?
- 在sql语句中如何将datetime类型转换为我需要char类型,
- 提个小问题,在线等待
- 怎么用DELPHI制作帮助!很着急
- 显示桌面的语句怎么写
- 请问有没有控件可以做出漂亮的界面,最好有动画效果。
Q.Terminate;
Q.Destroy;这几个去掉...
frm1: Tfrm1;
Q:TThreadOracle;procedure Tfrm1.btnStartClick(Sender: TObject);
begin
Q:=TThreadOracle.Create();
Q.Resume;
end;
还要用按钮来结束线程,如
procedure Tfrm1.btnEndClick(Sender: TObject);
begin
Q.Suspend;
Q.Free;
end;
begin
inherited Create(///false);
FreeOnTerminate := False; end;
private
procedure xxx();
protected
procedure Execute; override
public
constructor Create(); virtual;
end;Procedure MyThreadfunc ;
var
a,i,j:INteger;
begin
for i:=0 to 100000 do
for j:=0 to 100000 do
a:=i+j;
end ;Procedure TThreadOracle.Execute;
begin
if not Terminated then
try
XXX();
MyThreadfunc ; // 如果 MyThreadfunc 涉及 VCL 用 Synchronize 同步资源
except
Application.MessageBox('线程异常','错误',MB_OK+MB_IconError);
end;
end;Constructor TThreadOracle.Create();
begin
inherited Create(False);
FreeOnTerminate := False;
end;procedure Tfrm1.btnStartClick(Sender: TObject);
var
Q:TThreadOracle;
begin
ShowMessage('开始多线程');
Q:=TThreadOracle.Create(False);
with Q do
begin
if Suspended then Resume;
end ;
ShowMessage('结束多线程');
end;
Q.Terminate;
Q.Destroy;