プロバイダーでのフリー スレッドのサポート
すべての OLE DB プロバイダー クラスはスレッドセーフであり、レジストリ エントリはそれに応じて設定されます。 マルチユーザーの状況で高いレベルのパフォーマンスを提供するには、フリースレッド処理をサポートすることをお勧めします。 プロバイダーのスレッドセーフを維持するには、コードが正しくブロックされていることを確認する必要があります。 データの書き込みまたは格納を行う場合は常に、クリティカル セクションを使用してアクセスをブロックする必要があります。
各 OLE DB プロバイダー テンプレート オブジェクトには、独自のクリティカル セクションがあります。 ブロックしやすくするため、作成する新しいクラスそれぞれを、親クラス名を引数として受け取るテンプレート クラスにする必要があります。
次の例は、コードをブロックする方法を示しています。
template <class T>
class CMyObject<T> : public...
HRESULT MyObject::MyMethod(void)
{
T* pT = (T*)this; // this gets the parent class
// You don't need to do anything if you are only reading information
// If you want to write information, do the following:
pT->Lock(); // engages critical section in the object
...; // write whatever information you wish
pT->Unlock(); // disengages the critical section
}
Lock と Unlock を使用してクリティカル セクションを保護する方法の詳細については、「マルチスレッド: 同期クラスの使用法」を参照してください。
オーバーライドするすべてのメソッド (Execute など) がスレッドセーフであることを確認します。