FREETHRD サンプル : コンパイラ COM サポートを使用したマルチスレッド クライアントとフリー スレッド サーバー
このサンプルでは、コンパイラ COM サポートを使用したマルチスレッド クライアントとフリー スレッド サーバーの例を示します。
このサンプルの構成は次のとおりです。
Freclien (マルチスレッド クライアント)
Freserve (フリー スレッド インプロセス サーバー)
セキュリティに関するメモ |
---|
このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。 特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。 セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。 これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。 |
サンプルとそのインストール手順を取得するには
Visual Studio のサンプルにアクセスするには
[ヘルプ] メニューの [サンプル] をクリックします。
既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。
- このサンプルの最新バージョンと他のサンプルの一覧については、MSDN Web サイトの Visual Studio のサンプルを参照してください。
サンプルのビルドと実行
このサンプルをビルドして実行するには
ソリューション ファイル freethrd.sln を開きます。
サーバー プロジェクトをビルドしてから、クライアント プロジェクトをビルドします。
クライアント プロジェクトをスタートアップ プロジェクトとして設定 (プロジェクト ノードを右クリックして、[スタートアップ プロジェクトに設定] をクリックする) し、サンプルを実行します。
サンプルの動作
Freclien サンプルは、複数のスレッドを生成し、Freserve フリー スレッド サーバーから提供される COBall COM オブジェクトを作成して使用します。 COBall オブジェクト自体はスレッドを生成せずに、多くのクライアント スレッドからの IBall インターフェイス要求に受動的に応答します。 Freclien クライアントは、オブジェクトが公開する IBall インターフェイスを通じて 1 つの COBall オブジェクトを作成し、制御します。 Freclien の 3 つのスレッドが IBall::Move を通じてボールを移動するとき、残りのメイン スレッドはシステム タイマーを使用して、COBall オブジェクトの位置、サイズ、および色の定期的な更新を取得します。 メイン スレッドは、IBall::GetBall の呼び出しによって取得したデータを使用して、クライアントのメイン ウィンドウにボールのグラフィカル スナップショット イメージを表示します。
Freserve サンプルでは、オブジェクトの Move メソッドを呼び出した最後のスレッドのデータを反映して、COBall オブジェクトのカラー プロパティが内部的に更新されます。 表示スレッドは、このデータを使用して各ボール イメージを表示します。 ボールが移動すると、ボールを移動した各スレッドのデータを反映して色が変わります。 また、ボールが移動するとその形跡が残り、データを渡したスレッドの履歴を視覚的に確認できます。 この形跡によって、COM のフリー スレッド化モデルでは、同じオブジェクトにインターフェイス要求を出したすべてのスレッドが、呼び出し元のスレッドでオブジェクトにアクセスしていることがわかります。 さまざまに彩色された 1 つのボール オブジェクトのそれぞれの色が、異なる呼び出し元スレッドを表しています。
このサンプルでは、ネイティブ コンパイラ COM サポートを使用しています。 サンプルには、フリー スレッド化モデルを使用して RECT 構造体および POINT 構造体をマーシャリングする、カスタム COM インターフェイスの例があります。 #import ディレクティブの exclude 属性の使用例もあります。