次の方法で共有


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

すべての 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 などのオーバーライドするメソッドもスレッド セーフであることを確認する必要があります。

参照

概念

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