【发布时间】:2023-03-14 18:00:01
【问题描述】:
我想将带有参数的查询的执行放入 delphi-2009 中的线程安全类中。
我在 google 中导航,但没有找到我想要的。
谢谢
【问题讨论】:
标签: windows multithreading delphi delphi-2009 firebird
我想将带有参数的查询的执行放入 delphi-2009 中的线程安全类中。
我在 google 中导航,但没有找到我想要的。
谢谢
【问题讨论】:
标签: windows multithreading delphi delphi-2009 firebird
我发现大多数数据库 API 仅在连接级别是线程安全的。 Firebird 可能有所不同,但在数年(8 多年)前使用 InterBase,它不是线程安全的。更新:I have verified Firebird is only thread safe at the connection level.
这意味着您通常需要避免同时使用来自多个线程的单个连接。对给定连接执行查询适用。 避免在不同线程中针对同一连接运行两个查询。
但是,话虽如此,如果您有两个连接,则可以同时运行两个查询。
您的问题的本质似乎是如何以安全的方式将数据传递给线程,尽管您的特定需求是数据库,但这以通用方式适用,无论线程中包含什么。
传递数据最简单的方法是在创建时,您可以创建暂停的线程,在您的TThread 后代上设置各种属性。然后恢复线程的执行。
您在线程中执行工作的实际代码需要从 Execute() 方法中调用。
如果您需要在线程之间共享数据,您必须包装在允许同步的各种结构之一中,例如临界区、互斥体或信号量。
Delphi 在 SyncObjs.pas 单元中为每一个都提供了库包装器。
【讨论】: