Unterstützen des Freethreadings im Anbieter
Aktualisiert: November 2007
Alle OLE DB-Anbieterklassen sind threadsicher, und die Registrierungseinträge werden entsprechend festgelegt. Sie sollten Freethreading unterstützen, damit in Mehrbenutzersituationen eine hohe Leistung gewährleistet ist. Damit der Anbieter threadsicher bleibt, müssen Sie sicherstellen, dass der Code ordnungsgemäß blockiert wird. Sobald Daten geschrieben oder gespeichert werden, muss der Zugriff auf kritische Abschnitte blockiert werden.
Jedes OLE DB-Anbietervorlagenobjekt verfügt über einen eigenen kritischen Abschnitt. Um das Blockieren zu erleichtern, sollte jede neu erstellte Klasse eine Vorlagenklasse sein, die den Namen der übergeordneten Klasse als Argument annimmt.
Im folgenden Beispiel wird das Blockieren von Code veranschaulicht:
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
}
Weitere Informationen dazu, wie Sie kritische Abschnitte mithilfe von Lock und Unlock schützen, finden Sie unter Multithreading: Verwendungsweise der Synchronisierungsklassen.
Darüber hinaus müssen Sie sicherstellen, dass alle überschriebenen Methoden (z. B. Execute) threadsicher sind.