AutoThread サンプル : CAtlAutoThreadModule の使用例
更新 : 2007 年 11 月
AutoThread サンプルでは、CAtlAutoThreadModule の使用例を示します。このサーバーは、Server.exe ファイルで実装されます。EXE のモジュールは、CAtlModule ではなく CAtlAutoThreadModule から派生します。
AutoThread 属性は、このサンプルの属性付きバージョンです。
セキュリティに関するメモ : |
---|
このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。 |
サンプルとそのインストール手順を取得するには
Visual Studio で、[ヘルプ] メニューの [サンプル] をクリックします。
詳細については、「サンプル ファイルの格納場所」を参照してください。
使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。
サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。
サンプルのビルドと実行
このサンプルをビルドして実行するには
ソリューション ファイル AutoThread.sln を開きます。
[ビルド] メニューの [ソリューションのビルド] をクリックします。これで、クライアントとサーバーがビルドおよび登録されます。
ActiveX コントロール テスト コンテナの 2 つのインスタンスを開始します。テスト コンテナへのアクセス方法については、「テスト コンテナでのプロパティとイベントのテスト」を参照してください。
クライアント コントロールの 1 つ (AutoCtl クラス) を各テスト コンテナに挿入します。
コントロールを 1 つクリックします。サーバーから値が返されるまでに 1 秒かかります。
テスト コンテナの位置とサイズを変更し、両方のコンテナが同時に見えるようにします。
コントロールを 1 つクリックし、その直後にもう 1 つのコントロールもクリックします。待機時間はほぼ同じであることがわかります。CAtlAutoThreadModule を使用しなかった場合、最初のコントロールは 1 秒後に終了しますが、2 番目のコントロールは最初のコントロールが終了してから 1 秒経過した後に終了します。最初のコントロールが終了するまで、2 番目のスリープは呼び出されません。Delay(PropGet) メソッドと Delay(PropPut) メソッドを使用すると、サーバーがスリープする時間をミリ秒単位で調節できます。時間を適切に設定すると、最初のスリープの呼び出しの前に 2 番目のスリープの呼び出しが戻る場合があります。
サンプルの動作
サーバー インターフェイスには、Sleep という 1 つのメソッドがあります。このメソッドは、サーバー スレッドを一定時間スリープ状態にします。サンプルのクライアント部分は、ユーザーがコントロールをクリックしたときにサーバーのスリープ メソッドを呼び出す ActiveX コントロールです。また、クライアントには、サーバー スレッドのスリープ時間を表す Delay というプロパティもあります。コントロールでは、ユーザーのクリックを待機しているときに "Ready" と表示されます。サーバーのスリープが終了するのを待機しているときは、"Waiting" と表示されます。
キーワード
このサンプルでは、次のキーワードを使用します。
AtlGetObjectSourceInterface; BEGIN_SINK_MAP; CoCreateInstance; DECLARE_CLASSFACTORY_SINGLETON; IDispEventSimpleImpl::DispEventAdvise; END_SINK_MAP; IConnectionPointContainerImpl; IConnectionPointImpl; IDispEventImpl; OLE2CT; SINK_ENTRY_EX; SysAllocString; USES_CONVERSION; VARIANT; VariantClear; VariantCopy