FREETHRD サンプル : コンパイラ COM サポートを使用したマルチスレッド クライアントとフリー スレッド サーバー
更新 : 2007 年 11 月
このサンプルでは、コンパイラ COM サポートを使用したマルチスレッド クライアントとフリー スレッド サーバーの例を示します。
このサンプルの構成は次のとおりです。
Freclien (マルチスレッド クライアント)
Freserve (フリー スレッド インプロセス サーバー)
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないため、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
このサンプルをビルドして実行するには
ソリューション ファイル 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 属性の使用例もあります。