2 xumenger xumenger 于 2016.05.09 10:54 提问

线程Suspend为什么停不下来?GetLastError获取的错误不能被try except捕获吗

##说明

  • Delphi版本是6
  • 这个问题是在客户的环境上出现的,现在没办法再通过改代码的方式去验证

GetLastError

  • GetLastError是获取调用系统API出现的报错信息
  • 这种类型的错误能够被 try except 方式的异常机制捕获吗?

线程

  • 使用Delphi实现的一个线程,代码如下
  • GetLastError获取的错误码是2,并没有捕获异常,但是线程持续运行,说明suspend没有起作用
  • 另外,线程反复输出如下信息,并没有报错,说明压缩成功,走到suspend方法调用的代码行
正在压缩文件,请稍候...
压缩文件完成
GetLastError:2
正在压缩文件,请稍候...
压缩文件完成
GetLastError:2
正在压缩文件,请稍候...
压缩文件完成
GetLastError:2
……
……

为什么线程没有正常suspend而停止运行,反而是一直循环,根本停不下来

procedure TZipTask.Execute;
var
  bSuccess: Boolean;
  index: Integer;
  iError: Integer;
begin
  while not Terminated do
  begin
    try
      index := GetCurrentThreadId;
      SendMsg('正在压缩文件,请稍候...');
      ......//这里调用封装的一个压缩文件的API
      if bSuccess then
        SendMsg('压缩文件完成')
      else
        SendMsg('停止压缩文件');
    except
      on e:Exception do
      begin
        SendMsg('压缩文件出错' + E.Message);
      end;
    end;
    bComplete := True;
    Self.Suspend;
    iError := GetLastError;
    SendMsg('GetLastError:' + IntToStr(iError));
  end;
end;
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!