我写的一个线程类,但是在操作数据很多的时候后,关闭程序时会报错误操作句柄的错误,为什么?

wenkai 2002-11-28 01:25:39
这是线程的程序代码:
unit QCThreadSaveDBUt;

interface

uses
Classes;

type
TQCSaveDB = class(TThread)
private
{ Private declarations }
function IsTerminated:Boolean;
protected
procedure Execute; override;
public
constructor Create(CreateSuspended: Boolean);

end;

implementation
uses Forms,QCPubDef,SysUtils,PubFunUt,QCPubFun,ADODB,QCLRDM,QiChuYuELuRuUt;

constructor TQCSaveDB.Create(CreateSuspended: Boolean);
begin
FreeOnTerminate := True;
inherited Create(CreateSuspended);
end;

procedure TQCSaveDB.Execute;
var
i,Index:Integer;
begin
while (not IsTerminated) do
begin
if UpDateList.Count = 0 then
delay(1000)
else
begin
while(UpDateList.Count > 0) and (not IsTerminated) do
begin
Index := StrToIntDef(UpdateList.Strings[0],0);
if OperAccsumNew[Index].bHaveData = 1 then
InsertDB(frmQCLR.ADOQ,Index)
else
UpdateDB(frmQCLR.ADOQ,Index);
OperAccsumNew[Index].bSaveToDB := 0;
OperAccsumNew[Index].bHaveData := 0;
UpdateList.Delete(0);
end;
end;
end;

end;

function TQCSaveDB.IsTerminated: Boolean;
begin
Result := Terminated or Application.Terminated ;
end;



end.
我在调用时
FSaveDB := TQCSaveDB.Create(false);
窗体关闭时
FSaveDB.Terminate;
...全文
20 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
findcsdn 2002-11-30
  • 打赏
  • 举报
回复
//退出时判断并且等待;

if FSaveDB <> nil then
begin
FSaveDB.Terminate;
FSaveDB.WaitFor;
end;
petty7 2002-11-30
  • 打赏
  • 举报
回复
up
wangchinaking 2002-11-28
  • 打赏
  • 举报
回复
no ways
wisenowa 2002-11-28
  • 打赏
  • 举报
回复
你最好在程序退出时先通知你的线程停止而不要去判断Application.Terminated

然后再退出程序

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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