我想将带有参数的查询的执行放入 delphi-2009 中的线程安全类中。
我在 google 中导航,但没有找到我想要的内容。
谢谢
最佳答案
我发现大多数数据库 API 仅在连接级别是线程安全的。 Firebird 可能不同,但在几年(8+)年前使用 InterBase,它不是线程安全的。更新:I have verified Firebird is only thread safe at the connection level.
这意味着通常您需要避免同时使用来自多个线程的单个连接。针对给定连接执行查询适用。 避免在不同线程中针对同一连接运行两个查询。
但是,话虽如此,如果您有两个连接,则可以同时运行两个查询。
您的问题的本质似乎是如何以安全的方式将数据传递给线程,尽管您具体需要的是数据库,但无论线程中包含什么,这都适用于通用方式。
传递数据的最简单方法是在创建时,您可以创建暂停的线程,在您的 TThread
后代上设置各种属性。然后恢复线程的执行。
需要从 Execute()
方法调用在线程中执行工作的实际代码。
如果您需要在线程之间共享数据,您必须包装在允许同步的各种结构之一中,例如临界区、互斥体或信号量。
Delphi 的 SyncObjs.pas 单元中的每一个都有库包装器。
关于windows - 在后台线程中运行 Firebird 查询并保存结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5594174/