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

Ang*_*yel 3 windows delphi firebird multithreading delphi-2009

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

我在谷歌导航但我没有找到我想要的东西.

谢谢

Rob*_*ove 10

我发现大多数数据库API在连接级别只是线程安全的.Firebird可能会有所不同,但是几年前(8 +)使用InterBase,它不是线程安全的.更新:我已经验证Firebird在连接级别只是线程安全的.

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

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

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

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

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

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