我想将带参数的查询的执行放入delphi-2009中的线程安全类中。
我在Google中导航但我找不到我想要的内容。
谢谢
答案 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单元中为每个文件包装了包装器。