マルチスレッド

マルチスレッド オペレーティング システムでは、ドライバーはスレッド セーフである必要があります。 つまり、アプリが複数のスレッドで同じハンドルを使用できる必要があります。 これを実現する方法はドライバー固有であり、ドライバーが 2 つの異なるスレッドで同じハンドルを同時に使用しようとする試みをシリアル化する可能性があります。

アプリでは、通常、非同期処理の代わりに複数のスレッドが使用されます。 アプリは別のスレッドを作成し、そのスレッドで ODBC 関数を呼び出した後、メイン スレッドで処理を続行します。 SQL_ATTR_ASYNC_ENABLE ステートメント属性を使用する場合と同様に、非同期関数を継続的にポーリングする必要はなく、アプリは新しく作成されたスレッドを完了させることができます。

ステートメント ハンドルを受け入れ、あるスレッドで実行されている関数は、別のスレッドから同じステートメント ハンドルを使用して SQLCancel を呼び出すれば取り消すことができます。 ドライバーは、この方法で SQLCancel の使用をシリアル化することはできませんが、SQLCancel を呼び出すと、他のスレッドで実行されている関数が実際に取り消される保証はありません。