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

时间:2011-04-08 11:06:30

标签: windows multithreading delphi delphi-2009 firebird

我想将带参数的查询的执行放入delphi-2009中的线程安全类中。

我在Google中导航但我找不到我想要的内容。

谢谢

1 个答案:

答案 0 :(得分:10)

我发现大多数数据库API在连接级别只是线程安全的。 Firebird可能会有所不同,但是几年前(8 +)使用InterBase,它不是线程安全的。更新:I have verified Firebird is only thread safe at the connection level.

这意味着通常您需要避免同时使用来自多个线程的单个连接。适用于针对给定连接的查询的执行。 避免在针对同一连接运行的不同线程中有两个查询。

但是,如果你有两个连接,你可以同时运行两个查询。

您的问题的本质似乎是如何以安全的方式将数据传递给线程,虽然您特别需要的是数据库,但无论线程中包含什么,这都以通用方式应用。

传递数据的最简单方法是创建,您可以创建暂停的线程,在TThread后代设置各种属性。然后恢复线程的执行。 您需要从Execute()方法调用在线程中执行工作的实际代码。

如果需要在线程之间共享数据,则必须包含允许同步的各种结构之一,例如Critical Section,Mutex或Semaphore。

Delphi在SyncObjs.pas单元中为每个文件包装了包装器。