线程异常问题

zgwu 2002-08-17 12:26:29
执行Close就异常了。

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,unit2,
Db, DBTables;

type
TForm1 = class(TForm)
Query1: TQuery;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
ThreadGetCMM = class(TThread)
tQuery:TQuery;
public
procedure Execute; override;
end;
var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var myThreadGetCMM:ThreadGetCMM;

begin
myThreadGetCMM:=ThreadGetCMM.Create(false);
myThreadGetCMM.FreeOnTerminate:=true;

end;


procedure ThreadGetCMM.Execute;
begin
try
tQuery.Close;
except
ShowMessage('线程异常');
end

end;

end.
...全文
35 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
maoke000 2002-08-17
  • 打赏
  • 举报
回复
同意,
同意!!
把你的Query传进去。
在线程里怎么搞都可以。

没有东西,到底想搞啥,其实什么都不搞成。
除非你在线程内建一些对象。
shao528 2002-08-17
  • 打赏
  • 举报
回复
tquery1没有赋值,当然会异常啦,如楼上兄所言,要override线程类的create方法将form1的query1传给线程对象:

constructor ThreadGetCMM.create(q:TQuery);
begin
FQuery := q;
inherited;
// FQuery 为线程中定义的query,即你的tQuery,tQuery是一个type,这种命名有问题的。
end;
findcsdn 2002-08-17
  • 打赏
  • 举报
回复
你应该把Query1传到线程的tQuery上,你不传的话tquery不知道关闭谁呀,
如果要传tquery 最好把query1作为创建参数,重载线程的创建函数;
比如:
public
constructor create(q:TQuery); override;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧