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

更新 : 2007 年 11 月

すべての 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 プロバイダ テンプレートの操作