5,927
社区成员




win7/win10/win10+delphi12.1+ehlib+xls,前两台单位的机子,后一台家里的机子。
同样的版本安装,单位的win7和家里的win10,运行同样的项目,一切正常;单位的win10(刚装机)运行同样的项目却出现这个提示,但并不影响正常的运行和退出。delphi10.3/10.4也没有问题。
仔细看了看代码,就登录时用了一个线程
t := TMyThread.Create(False);
h := t.Handle;
repeat
w := MsgWaitForMultipleObjects(1, h, False, INFINITE, QS_ALLINPUT);
Application.ProcessMessages;
until (w = WAIT_OBJECT_0) or (w = WAIT_FAILED);
try
......
if ado.FieldByName('状态').IsNull then
begin
t.Terminate;
exit;
end;
finally
t.Terminate;
t := nil;
end;
是代码漏洞,还是安装的问题,大佬给看看有什么问题吗?
总结
根据BlueStorm的提示,确实线程自动Terminate,检查代码发现已经设置了FreeOnTerminate := True。
所以,要不去掉Terminate,要不去掉FreeOnTerminate := True,代码运行正常。
不过,还是很奇怪,同样的代码,为什么只有一台机子的delphi12.1的代码运行出现这个问题,本机的delphi10.3/10.4都运行正常,而且其他机子的10.3/10.4/12.1均运行正常,太奇怪了。
也有可能是,你Terminate线程的时候,线程早就FreeOnTeminate了
这个线程的FExternalThread被设成True了, Terminate这个线程就会报这个错误, 你跟踪一下FExternalThread什么时候从false变成true.
没看出来这个线程有什么用