プロバイダーでのフリー スレッドのサポート

すべての 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
}

LockUnlock を使用してクリティカル セクションを保護する方法の詳細については、「マルチスレッド: 同期クラスの使用法」を参照してください。

オーバーライドするすべてのメソッド (Execute など) がスレッドセーフであることを確認します。

関連項目

OLE DB プロバイダー テンプレートの操作