ODBC クラスおよびスレッド
MFC 4.2 以降、MFC ODBC クラスに対してマルチスレッドがサポートされるようになりました。 ただし、MFC は DAO クラスに対してマルチスレッドのサポートを提供していないことに注意してください。
ODBC クラスに対するマルチスレッドのサポートには、いくつかの制限があります。 これらのクラスは ODBC API をラップしているため、ビルドに使ったコンポーネントのマルチスレッドのサポート範囲に制限されます。 たとえば、多くの ODBC ドライバーはスレッドセーフではありません。そのため、MFC ODBC クラスをこのようなドライバーのいずれかと共に使う場合、スレッドセーフではありません。 特定のドライバーがスレッドセーフであるかどうかを確認する必要があります。
マルチスレッド アプリケーションを作成する場合、複数のスレッドを使って同じオブジェクトを操作する場合は十分に注意する必要があります。 たとえば、2 つのスレッドで同じ CRecordset
オブジェクトを使うと、データをフェッチするときに問題が発生する可能性があります。あるスレッドでフェッチ操作を行うと、他のスレッドでフェッチしたデータが上書きされる可能性があります。 個別のスレッドでの MFC ODBC クラスのより一般的な使用方法は、開かれている CDatabase
オブジェクトをスレッド間で共有して同じ ODBC 接続を使い、各スレッドで別の CRecordset
オブジェクトを使う場合です。 開かれていない CDatabase
オブジェクトを別のスレッドの CRecordset
オブジェクトに渡さないように注意してください。
Note
複数のスレッドに同じオブジェクトを操作させる必要がある場合は、クリティカル セクションなどの適切な同期メカニズムを実装するようにします。 Open
のような特定の操作は保護されないことに注意してください。 これらの操作が個別のスレッドから同時に呼び出されないようにする必要があります。
マルチスレッド アプリケーションの作成については、マルチスレッドに関するトピックを参照してください。
関連項目
ODBC (Open Database Connectivity)
データ アクセス プログラミング (MFC/ATL)