我做了一个多线程查询的程序,为什么我每次关闭程序的时候都会出现地址访问异常的错误。

解决方案 »

  1.   

    线程定义
    procedure TThreadQuery.Execute ;
    begin
      try
        Synchronize(UpdateDevData);
      except
        Form1.Memo1.Lines.Add('错误T001,更新出错!');
      end;
    end;procedure TThreadQuery.UpdatedevData ;
    begin
      devSum := 0;
      while (not mQuery.Eof) do
      begin
          Form1.StatusBar1.SimpleText := '['+dbHNName+' ]将要传送设备数据,这可能需要几分钟时间。正在向服务器更新设备数据......';
          if(Form1.InsertNewDevData(mQuery) = '1')then
          begin
            devSum := devSum +1;
          end;
        mQuery.Next;
      end;
    end;
    constructor TThreadQuery.Create(objQuery :TADOQuery);
    begin
      mQuery := objQuery;
      inherited Create(true);
      FreeOnTerminate := false;
    end;线程运用: objQuery是一个ADOQuery对象。这段代码是在定时器中执行的。
      if(objQuery.RecordCount > 0) then
      begin
        objControlTrans.MaxEquipId := objQuery.FieldByName('Id').AsString;
        isCancel := true;
        ShowData(objQuery);    objThreadQuery := TThreadQuery.Create(objQuery); //启动线程
        objThreadQuery.Execute ;
        if(devSum <> 0) then
        begin
          isNewDev := true;
        end;
      end;谢谢了
      

  2.   

    程序开始的时候create,在close的时候要free