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

2024-01-29

在 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 机器上我发现,如果我don't单击按钮一切都很好,但如果我do单击按钮关闭应用程序时收到上述错误消息。

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

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

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


更新:正如 François 在下面指出的,这实际上是目前 Delphi 2009 中的一个错误 - 您可以在这里投票 http://qc.codegear.com/wc/qcmain.aspx?d=67726.


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


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

DoneThreadSynchronization清除ThreadLock结构,那么
FreeExternalThreads调用时想要销毁刚刚创建的Thread对象CurrentThread, and
这需要 ThreadLock 在调用中已经初始化
EnterCriticalSection(ThreadLock) in TThread.RemoveQueuedEvents...

UPDATE:
现在有一个解决办法补丁 in the 质检报告 http://qc.codegear.com/wc/qcmain.aspx?d=67726.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何从 Delphi 中的函数返回对象而不导致访问冲突?

    我有一个返回 TStringList 的 delphi 函数 但是当我返回一个值并尝试使用它时 我收到一个访问冲突错误 即 myStringList FuncStringList myStringList Items Count lt Th
  • 如何释放 TInterfacedObject 中的 TObject 成员

    我知道接口对象是引用计数的 因此不需要手动释放它 但如果它有一个 TObject 继承成员 我是否应该在析构函数中手动释放该成员 考虑以下代码 program Project2 APPTYPE CONSOLE R res uses Syst
  • Delphi 2010 - 从 XML 文档解码 Base64 编码图像

    我正在尝试从应用程序中的 XML 文档解码 base64 编码的 EMF 图像并将其呈现在屏幕上 但是 它似乎从未出现 如果我将 XML 文档中的数据复制 粘贴到 Notepad 中并使用Base64 Decode选项并将文件另存为 emf
  • 如何在Delphi中显示Vista风格的气球提示?

    在输入验证时 我使用气球提示而不是消息框 我的问题是 在 Vista 上 它们具有带圆角的旧 XP 样式 而不是较新的矩形外观 我尝试使用 CreateWindowEx 创建它们并且tooltips class32或使用 SendMessa
  • 通过套接字发送动态数组(在记录内)?

    我正在尝试直接使用 SendBuf 将记录从服务器传输到客户端 但是 该记录有一个动态数组的成员 并且我在某处 在 SOF 中 读到 发送记录时 成员必须是静态的 固定长度 但问题是 我无法确定如何我会 将来 发送许多论点 我怎么解决这个问
  • 如何比较枚举类型集

    从某个时刻开始 我厌倦了编写设定条件 and or 因为对于更多的条件或更长的变量名 重新编写会变得笨拙且烦人 所以我开始写助手这样我就可以写ASet ContainsOne ceValue1 ceValue2 代替 ceValue1 in
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • 为什么 Delphi 中的 ADO Next 记录处理速度变慢?

    我有一个多年前开发的 Delphi 4 程序 它使用Opus 直接访问 http sourceforge net projects directaccess 按顺序搜索 Microsoft Access 数据库并检索所需的记录 Delphi
  • H2161 重复资源[一个VCL项目可以有2个类名相同但命名空间不同的表单吗?]

    我尝试在 2 个不同的命名空间中创建具有相同类名的 2 个表单 FirstNameSpace ExampleFormName TExampleFormName SecondNameSpace ExampleFormName TExample
  • 使用 PutBlock 并将字节数组全部设置为零的 EIPHTTPProtocolExceptionPeer 异常

    使用 Delphi XE2 Update 3 我在将零字节块上传到 Azure 时遇到问题 当我说零字节时 我指的是每个元素设置为零的字节数组 不是零长度 例如 var ConInfo TAzureConnectionInfo RespIn
  • FireMonkey iOS RAD Studio XE2 - 在从 URL 加载的表单上显示图像

    是否可以将 TImage 放置在 iOS 的 FMX 表单上 并将图像 jpg 从 URL 加载到此 TImage 中以在 iOS 应用程序中显示 我尝试过但没有成功 任何正确方向的提示或指出都会受到赞赏 将 TButton TImageC
  • Delphi 7 - 处理表单中嵌入框架的 MouseWheel 事件?

    你好 我有一个表格 里面有几个框架 对于某些框架 我希望滚动内容 或至少处理鼠标滚轮事件 我已经尝试过以下方法 只需为每个帧分配一个 OnMouseWheel 事件处理程序 重写父窗体的 MouseWheel 事件 procedure TF
  • 为什么 TImage 旋转我的图像?

    编写一个移动应用程序 它从安全网站提取图像 如下所示 第一个图像 提取不正确 注意网络版本与移动版本 第二个图像在网站上正确显示 但 Delphi TImage 由于某种原因正在旋转它我不明白为什么 旋转设置为 0 并且在 TImage 组
  • Delphi 2005 Web 服务问题

    我在尝试通过 Delphi 访问 Web 服务时遇到问题 我使用了 2007 版 WSDLimp 工具的 java WSDL 看起来它已正确创建了所有对象 然而 当我制作一个调用该服务的测试程序时 每个对象都是空的 如果我在 HTTPRIO
  • 面向 Delphi 开发人员的 Qt

    有人知道为 Delphi C Builder VCL 开发人员解释 Qt 的书籍或教程吗 对于具有该背景的开发人员来说 学习 Qt 的最佳方法是什么 我对如何使用 Qt 完成我知道如何在 Delphi 中完成的事情特别感兴趣 例如 Qt 相
  • 德尔福和Doxygen

    我想使用 doxygen pas2dox 记录我的源代码 当我设置好所有内容 包括过滤器和提取选项 提取所有内容 时 doxygen 运行良好 但生成的文档仅包含源文件作为链接 并且没有提取类型 方法 过滤后的源看起来不错 有任何提示如何定
  • Delphi 应用程序被 Google Chrome 视为“危险”

    我经常用Delphi 2009制作数学软件 并将其发布在我的网站上 然而 去年左右 Google Chrome 开始认为我的一小部分 但数量不断增加 EXE 是 有害的 并且 Google Chrome 拒绝下载它们 例如 今天我编写了一个
  • 通过“修改日期”确定文件夹中的哪个文件是最新的?

    我需要扫描特定文件夹中的最新文件 基本上检查修改日期以查看哪个是最新的 但请记住这些文件具有随机名称 这是我到目前为止得到的 procedure TForm1 Button1Click Sender TObject begin ftp Ho
  • VirtualStringTree 正确/推荐使用

    我已经使用 virtualstringtree 一段时间了 我将它用于两个不同的用途 第一个是用于选择 显示数据的普通树 第二个是作为网格来显示 SQL 语句的输出 我加载到树中的所有数据都来自数据库 对于树示例 我有一个 ParentId
  • Soap Delphi 客户端因 1MB 调用超时而结束

    我们正在开发 SOAP Web 服务 Apache PHP 所有小规模调用都运行良好 但对于 1Mb 的 Soap 调用 HTTPS 调用大小为 1MB 我们的 Delphi Soap 客户端在除一台 PC 之外的所有 PC 上都因超时而停

随机推荐