windows - 在后台线程中运行 Firebird 查询并保存结果集

标签 windows multithreading delphi delphi-2009 firebird

我想将带有参数的查询的执行放入 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/

相关文章:

string - 在 Delphi XE4 中使用 AnsiString 之类的数组字节

windows - 组件的标准类别走动

windows - 带有额外模块的 Opencv 3.1.0 抛出 DLL 加载失败错误

java - 向 LinkedBlockingDeque 客户端发出信号停止消费的最佳方式是什么?

windows - eclipse 不能在 windows 10 上运行

objective-c - 如何在 NSOperationQueues 上自动安装 NSExceptionHandlers?

multithreading - VC++ 2010 Express 没有 std::thread 吗?

sql - sql注入(inject)场景中格式化函数与参数?

c - 为什么我的 C 代码无法运行或运行速度太慢?

windows - 使用 Windows 控制台通过 Pushgateway (Prometheus) 发送指标