【发布时间】:2011-11-08 18:15:49
【问题描述】:
我想在尝试之前检查一下。我正在处理几个线程,这些线程需要从线程中的数据库中获取数据。目前,根据我所见,我正在从线程中创建一个新的数据库连接(TADOConnection)。一切正常,但如果我可以从线程外部的某个地方获取连接对象会很棒。基本上,我不想继续为每个线程执行创建一个新的 TADOConnection。
是否可以在线程外部发布 TADOConnection 属性(因此在我创建线程时分配它)然后在线程内使用该连接?然后我需要做的就是在线程内创建 TADODataSet 并将其连接分配给这个 TADOConnection。我对此有点怀疑,特别是因为在线程中使用 ADO 时需要调用 CoInitialize 和 CoUninitialize。
【问题讨论】:
-
Is Delphi's TADOConnection thread-safe? 的可能重复项另外,您总是必须在每个使用 COM 的单独线程中调用
CoInitialize/CoUnitialize,因为 COM 是特定于线程上下文的。 -
好吧,如果线程/s 刚刚创建了一个 TADOConnection 并且在应用程序运行期间一直挂在它上面,这有关系吗?您是否需要不断创建/销毁这些线程?
-
已经有了我的答案 - 问题是我根据需要创建这些线程,这可能意味着一次 10 个线程,或者每半小时 1 个线程。他们确实释放了自己,他们不会保持活跃,一旦完成,我就不再使用它了。我只是想看看我是否可以避免多次创建它。
-
池化你的线程并使它们可重入,这样你就可以重用线程而不是在每个任务之后释放它们。
-
我实际上是在做 2 层线程。我有一个主线程,是的,它正在循环中继续。但是其他的只是按需创建,并且从来没有专门针对一个主题。基本上它向服务器发送单个请求,等待响应,然后在收到响应时触发事件。一旦我得到那个回应,我就不再需要它了。这些请求中的每一个都从其自己的线程发送到服务器。比如我需要 3 个数字,每个数字都需要很长时间来计算,我同时发送 3 个请求,从而产生 3 个线程。
标签: database multithreading delphi delphi-7 adoconnection