AutoThread 属性サンプル:CAtlAutoThreadModule の使用を示します
AutoThread サンプルでは、CAtlAutoThreadModule の使用例を示します。 このサーバーは、Server.exe ファイルで実装されます。 The module of the EXE is derived from CAtlAutoThreadModuleinstead of CAtlModule.
AutoThread サンプルは、このサンプルの属性なしバージョンです。
セキュリティに関するメモ |
---|
このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。 |
サンプルとそのインストール手順を取得するには
Visual Studio のサンプルにアクセスするには
[ヘルプ] メニューの [サンプル] をクリックします。
既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。
このサンプルをビルドして実行するには
ソリューション ファイル AutoThread.sln を開きます。
From the Build menu, click Build Solution. これで、クライアントとサーバーがビルドおよび登録されます。
ActiveX コントロール テスト コンテナーの 2 つのインスタンスを開始します。 テスト コンテナーへのアクセス方法については、「テスト コンテナーでのプロパティとイベントのテスト」を参照してください。
クライアント コントロールの 1 つ (CAutoCtl クラス) を各テスト コンテナーに挿入します。
コントロールを 1 つクリックします。サーバーから値が返されるまでに 1 秒かかります。
テスト コンテナーの位置とサイズを変更し、両方のコンテナーが同時に見えるようにします。
コントロールを 1 つクリックし、その直後にもう 1 つのコントロールもクリックします。 待機時間はほぼ同じであることがわかります。 CComAutoThreadModule を使用しなかった場合、最初のコントロールは 1 秒後に終了しますが、2 番目のコントロールは最初のコントロールが終了してから 1 秒経過した後に終了します。 最初のコントロールが終了するまで、2 番目のスリープは呼び出されません。使用すると、Delay(PropGet) および Delay(PropPut) メソッドは、サーバーのスリープ状態のミリ秒数を調整するのには。 時間を適切に設定すると、最初のスリープの呼び出しの前に 2 番目のスリープの呼び出しが戻る場合があります。
サンプルの動作
サーバーのインターフェイスを 1 つのメソッドは次のとおりです。Sleep. このメソッドは、サーバー スレッドを一定時間スリープ状態にします。 サンプルのクライアント部分は、ユーザーがコントロールをクリックしたときにサーバーのスリープ メソッドを呼び出す ActiveX コントロールです。 クライアントもサーバー スレッドがスリープ状態がどのくらいの期間を表す Delay という名前のプロパティがあります。 コントロールでは、ユーザーのクリックを待機しているときに "Ready" と表示されます。 サーバーのスリープが終了するのを待機しているときは、"Waiting" と表示されます。
属性
このサンプルでは次の属性を使用します。
AutoThread/AutoClient コクラス、デュアル、emitidl、helpstring、ID で、モジュール、オブジェクト、チェックアウト、pointer_default、progid、propget、propput、registration_script、スレッド、uuid、バージョン、vi_progid retval]
AutoThread/AutoServer 、コクラス、デュアル、emitidl、helpstring、ID、モジュール、オブジェクト、pointer_default、progid、スレッド、uuid、バージョン、vi_progid
Keywords
このサンプルでは、次のキーワードを使用します。
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
注意
このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。