我想把带参数的查询的执行放到delphi-2009中的一个线程安全类中。
我在谷歌中导航,但我没有找到我想要的东西。
谢谢
发布于 2011-04-08 19:46:24
我发现大多数数据库API只在连接级别上是线程安全的。火鸟可能有所不同,但几年前使用InterBase (8+)时,它不是线程安全的。更新:I have verified Firebird is only thread safe at the connection level.
这意味着通常需要避免同时使用来自多个线程的单个连接。对给定连接执行查询将适用。避免在不同线程中针对同一连接运行两个查询。
但是,话虽如此,如果您有两个连接,则可以同时运行两个查询。
您的问题的本质似乎是如何以安全的方式将数据传递给线程,尽管您的特定需求是数据库,但无论线程中包含什么,这都适用于通用的方式。
传递数据的最简单方法是在创建时,您可以创建挂起的线程,设置您的TThread后代的各种属性。然后恢复线程的执行。在线程中执行工作的实际代码需要从Execute()方法调用。
如果需要在线程之间共享数据,则必须包装在允许同步的各种结构中,例如临界区、互斥或信号量。
Delphi在SyncObjs.pas单元中为其中的每一个都提供了库包装。
https://stackoverflow.com/questions/5594174
复制相似问题