2011-11-08 54 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。繼續運行的線程在每次循環時都使用此連接,但單線程線程只使用一次。