xumenger 2016-05-09 02:54 采纳率: 72.2%
浏览 417

线程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;
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 用三极管设计一个单管共射放大电路
    • ¥20 fluent无法启动
    • ¥15 孟德尔随机化r语言运行问题
    • ¥15 pyinstaller编译的时候出现No module named 'imp'
    • ¥15 nirs_kit中打码怎么看(打码文件是csv格式)
    • ¥15 怎么把多于硬盘空间放到根目录下
    • ¥15 Matlab问题解答有两个问题
    • ¥15 LCD12864中文显示
    • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
    • ¥15 gsoap生成onvif框架