プロバイダでのフリー スレッドのサポート
更新 : 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 などのオーバーライドするメソッドもスレッド セーフであることを確認する必要があります。