问题描述
- 线程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;
时间: 2024-09-20 04:39:43