2011-11-08 38 views
1

我想在尝试之前检查它。我正在研究几个线程,这些线程需要从线程内的数据库中获取数据。目前,基于我见过的所有内容,我正在线程中创建一个新的数据库连接(TADOConnection)。所有的工作都很好,但如果我能从线程之外的某个地方获得连接对象,那将会很好。基本上,我不想为每个线程执行创建一个新的TADOConnection。与线程共享数据库连接,而不是创建新的线程

是否可以在线程外部发布TADOConnection属性(因此在创建线程时分配它),然后在线程内使用该连接?我所需要做的就是在线程内创建TADODataSet并将其连接分配给此TADOConnection。我对此有点不确定,特别是因为我需要在线程中使用ADO时调用CoInitialize和CoUninitialize。

+4

可能重复[是Delphi的TADOConnection线程安全?](http://stackoverflow.com/questions/1241844/is-delphis-tadoconnection-thread-safe)此外,你*总是*必须调用'CoInitialize/CoUnitialize'在每个使用COM的线程中,因为COM是线程上下文特定的。 –

+0

那么,如果线程刚刚创建了TADOConnection,并且在应用程序运行期间挂在它上面,它会影响吗?你是否需要不断创建/销毁这些线程? –

+0

已经有我的答案了 - 事情是我在需要的基础上创建这些线程,这可能意味着一次10个线程,或者每半个小时一个线程。他们释放自己,他们不会保持活跃,一旦完成,我已经不再使用它了。我只是想看看我是否可以避免多次创建它。 –

回答

1

答案看起来不是。因为TADOConnection(和其他ADO组件)是基于COM的,所以它们不能通过线程传递。所以在这种情况下,我别无选择,只能在每个线程中创建一个新的TADOConnection。继续运行的线程在每次循环时都使用此连接,但单线程线程只使用一次。