次の方法で共有


MultiRead 属性サンプル:複数のスレッドを使用してデータベース テーブルを読み取り

MultiRead 属性サンプルでは、OLE DB コンシューマー テンプレート クラスを使用して複数のスレッドでデータベース テーブルを読み取る方法を示します。

MultiRead サンプルは、このサンプルの属性なしバージョンです。

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

サンプルとそのインストール手順を取得するには

Visual Studio のサンプルにアクセスするには

  • [ヘルプ] メニューの [サンプル] をクリックします。

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

  1. ソリューション ファイル MultiRead.sln を開きます。

  2. [ビルド] メニューの [ビルド] をクリックします。

  3. メニューの [デバッグ、 デバッグなしで開始] をクリックします。

  4. [Multi-Threaded Read] ダイアログ ボックスが表示され、テーブルの読み取りに使用するスレッド数を指定するように要求されます。 の実行] をクリックします。

    結果は [Multi-Threaded Read] ダイアログ ボックスにテキストで表示されます。たとえば、15 records in 7 ms のように表示されます。

サンプルの動作

このサンプルには、ダイアログ ボックスの表示に使用される CMultiDlg クラスが含まれています。 このダイアログ ボックスを使用して、テーブルの読み取りに使用するスレッド数をユーザーが入力します。 ユーザー の実行ボタンをクリックすると、 ReadRecords DBRead.h では、データベース、セッション、およびテーブルを開くと、必要な数のスレッドを作成すると呼ばれます。 テーブルが表示されます、関数、プロバイダーが以前に取得した行のボタンを離さずに新しい行を取得するユーザーを許可するように、True、DBPROP_CANHOLDROWS プロパティが設定されます。 この機能は、ほかのスレッドが現在のスレッドを処理しているときに、複数のスレッドによって新しい行が取得されるために必要です。

このサンプルでは、CRowset から派生する新しい CMyRowset クラスを作成して標準の CRowset クラスを拡張する方法も示します。さらに、MoveAndProcess メンバー関数が追加されます。 各スレッドの開始ルーチンは ReadTable 関数であり、この関数にテーブル クラスが渡されます。 この関数は MoveAndProcess ルーチンを呼び出して各レコードを読み取ります。 CProduct 呼び出しでデータが自動的に取得されないように、アクセサー クラス MoveNext が定義されています。 したがって、ほかのスレッドとのバッファーの競合が回避され、クリティカル セクションを使用して MoveNext を保護する必要はなくなります。 MoveAndProcess 関数は MoveNextを呼び出し、その関数のローカルの変数に直接データを格納する GetDataHere から呼び出します。 ProcessRecord 取得の各レコードは"と呼ばれ、関数だけで、レコードの値が既定ではトレースします。

各スレッドは、読み取ったレコード数をカウントします。レコードは最後にトレースされ、合計数および所要時間と共にダイアログ ボックスに表示されます。

注意

MultiRead サンプルでは、MultiRead.mdb データベース ファイルを読み込みます。サンプル コードでは、このファイルが現在のディレクトリにあると仮定しています。

属性

このサンプルでは次の属性を使用します。

db_column , db_source, db_table, exe, helpstring, module, name, threading, uuid, version

Keywords

このサンプルでは次のクラスを使用します。

CAccessor, CDataSource, CDBPropSet, CRowset, CSession, CTable

このサンプルでは次のマクロを使用します。

BEGIN_ACCESSOR_MAP , BEGIN_ACCESSOR, COLUMN_ENTRY, END_ACCESSOR, END_ACCESSOR_MAP, DEFINE_COMMAND

このサンプルでは次の機能を使用します。

CreateThread, GetCurrentThreadId, GetExitCodeThread, WaitForMultipleObjects

注意

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

ATL 属性のサンプル