AutoThread 属性サンプル : CAtlAutoThreadModule の使用例

更新 : 2007 年 11 月

AutoThread サンプルでは、CAtlAutoThreadModule の使用例を示します。このサーバーは、Server.exe ファイルで実装されます。EXE のモジュールは、CAtlModule ではなく CAtlAutoThreadModule から派生します。

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

29eewbfh.alert_security(ja-jp,VS.90).gifセキュリティに関するメモ :

このサンプル コードは概念を示す目的で提供されているものです。必ずしも最も安全なコーディング手法に従っているわけではないので、アプリケーションまたは Web サイトでは使用しないでください。Microsoft は、サンプル コードが意図しない目的で使用された場合に、付随的または間接的な損害について責任を負いません。

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

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

    詳細については、「サンプル ファイルの格納場所」を参照してください。

  • 使用できるサンプルの最新バージョンと完全な一覧については、オンラインの Visual Studio 2008 Samples のページを参照してください。

  • サンプルは、コンピュータのハード ディスク上にもあります。既定では、サンプルおよび Readme ファイルは、\Program Files\Visual Studio 9.0\Samples\ の下のフォルダにコピーされます。Visual Studio Express Edition の場合、すべてのサンプルはオンライン上にあります。

このサンプルをビルドして実行するには

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

  2. [ビルド] メニューの [ソリューションのビルド] をクリックします。これで、クライアントとサーバーがビルドおよび登録されます。

  3. ActiveX コントロール テスト コンテナの 2 つのインスタンスを開始します。テスト コンテナへのアクセス方法については、「テスト コンテナでのプロパティとイベントのテスト」を参照してください。

  4. クライアント コントロールの 1 つ (CAutoCtl クラス) を各テスト コンテナに挿入します。

  5. コントロールを 1 つクリックします。サーバーから値が返されるまでに 1 秒かかります。

  6. テスト コンテナの位置とサイズを変更し、両方のコンテナが同時に見えるようにします。

  7. コントロールを 1 つクリックし、その直後にもう 1 つのコントロールもクリックします。待機時間はほぼ同じであることがわかります。CComAutoThreadModule を使用しなかった場合、最初のコントロールは 1 秒後に終了しますが、2 番目のコントロールは最初のコントロールが終了してから 1 秒経過した後に終了します。最初のコントロールが終了するまで、2 番目のスリープは呼び出されません。Delay(PropGet) メソッドと Delay(PropPut) メソッドを使用すると、サーバーがスリープする時間をミリ秒単位で調節できます。時間を適切に設定すると、最初のスリープの呼び出しの前に 2 番目のスリープの呼び出しが戻る場合があります。

サンプルの動作

サーバー インターフェイスには、Sleep という 1 つのメソッドがあります。このメソッドは、サーバー スレッドを一定時間スリープ状態にします。サンプルのクライアント部分は、ユーザーがコントロールをクリックしたときにサーバーのスリープ メソッドを呼び出す ActiveX コントロールです。また、クライアントには、サーバー スレッドのスリープ時間を表す Delay というプロパティもあります。コントロールでは、ユーザーのクリックを待機しているときに "Ready" と表示されます。サーバーのスリープが終了するのを待機しているときは、"Waiting" と表示されます。

属性

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

  • AutoThread/AutoClient   coclass、dual、emitidl、helpstring、id、in、module、object、out、pointer_default、progid、propget、propput、registration_script、retval、threading、uuid、version、vi_progid

  • AutoThread/AutoServer   coclass、dual、emitidl、helpstring、id、module、object、pointer_default、progid、threading、uuid、version、vi_progid

キーワード

このサンプルでは、次のキーワードを使用します。

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

29eewbfh.alert_note(ja-jp,VS.90).gifメモ :

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

参照

その他の技術情報

ATL 属性のサンプル