gpt4 book ai didi

Delphi TThread.CurrentThread 和 EAccessViolation - 这是一个错误还是我的无能..?

转载 作者:行者123 更新时间:2023-12-03 14:39:30 26 4
gpt4 key购买 nike

在 Delphi 2009 中,我发现每当我在应用程序中使用 TThread.CurrentThread 时,应用程序关闭时我都会收到如下错误消息:

Exception EAccessViolation in module ntdll.dll at 0003DBBA.
Access violation at address 7799DBBA in module 'ntdll.dll'. Write of
address 00000014.

除非它只是我的机器,否则您可以在几秒钟内复制此操作:创建一个新的 Delphi Forms 应用程序,向表单添加一个按钮,并对按钮的事件处理程序使用类似以下内容:

procedure TForm1.Button1Click(Sender: TObject);
begin
TThread.CurrentThread;
end;

在我的 Vista 计算机和 XP 计算机上,我发现,如果我单击该按钮,一切都很好,但如果我确实单击该按钮当我关闭应用程序时,我收到上述错误消息。

所以...我想知道这是否是一个错误,但同时我认为很可能我只是不理解关于如何在 Delphi 中使用 TThreads 的一些非常基本的知识。恐怕我是一个 Delphi 新手。

这样使用 TThread.CurrentThread 有明显的问题吗?

如果没有,并且您有 Delphi 2009,那么如果您实现我的简单示例项目,您是否会遇到同样的问题?

<小时/>

更新:正如 François 在下面指出的,这实际上是目前 Delphi 2009 中的一个错误 - 您可以 vote for it here .

<小时/>

更新:此错误已在 Delphi 2010 中修复。

最佳答案

不幸的是,这似乎是与类单元中终结部分的调用顺序相关的错误:

DoneThreadSynchronization 清除ThreadLock 结构,然后
FreeExternalThreads 想要在调用 CurrentThread 时销毁刚刚创建的 Thread 对象,并且
这要求 ThreadLock 已在调用中初始化
TThread.RemoveQueuedEvents 中的 EnterCriticalSection(ThreadLock)...

更新:
QC report 中现在有一个解决方法补丁 .

关于Delphi TThread.CurrentThread 和 EAccessViolation - 这是一个错误还是我的无能..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/188281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com