2011-11-08 9 views
1

私は試してみる前にこれをチェックしたかったのです。私はスレッド内のデータベースからデータを取得する必要があるいくつかのスレッドに取り組んでいます。現在、私が見たすべてに基づいて、スレッド内から新しいデータベース接続(TADOConnection)を作成しています。スレッドの外のどこかから接続オブジェクトを取得できれば、それ以外はうまく動作します。基本的には、スレッドの実行ごとに新しいTADOConnectionを作成し続けたくありません。新しいスレッドを作成するのではなく、スレッドとデータベース接続を共有する

それは(私がスレッドを作成するときので、それを割り当てる)糸の外側にTADOConnectionのプロパティを公開して、スレッド内でその接続を使用することは可能ですか?私がする必要があるのは、スレッド内にTADODataSetを作成し、このTADOConnectionに接続を割り当てることだけです。私はこれについて少し不安です。特に、スレッドでADOを処理するときにCoInitializeとCoUninitializeを呼び出す必要があるためです。

+4

[DelphiのTADOConnectionはスレッドセーフですか?](http://stackoverflow.com/questions/1241844/is-delphis-tadoconnection-thread-safe)また、あなたは常にCoInitialize/COMがスレッドコンテキスト特有であるため、COMを使用する個々のスレッドごとに「CoUnitialize」を実行します。 –

+0

さて、もしスレッド/ sがちょうどTADOConnectionを作成していて、アプリの実行中にスレッドを止めてしまっていれば問題でしょうか?これらのスレッドを継続的に作成/破壊する必要がありますか? –

+0

すでに私の答えがあります - 必要に応じてこれらのスレッドを作成しています。これは一度に10スレッド、または30分ごとに1スレッドを意味する可能性があります。彼らは自分自身を自由にする、彼らはアクティブにとどまらない、それが完了したら私はもうそれを使わない。私は何度もそれを作成することを避けることができたかどうかを知りたかっただけです。 –

答えて

1

答えは「いいえ」のようです。 TADOConnection(および他のADOコンポーネント)はCOMベースなので、スレッド間で渡すことはできません。したがって、この場合は、各スレッド内から新しいTADOConnectionを作成する以外に選択肢はありません。実行を続けるスレッドは、ループするたびにこの接続を使用しますが、シングルランスレッドはその接続を1回だけ使用します。

関連する問題