AutoThread 属性示例:演示 CAtlAutoThreadModule 的使用

更新:2007 年 11 月

AutoThread 示例说明如何使用 CAtlAutoThreadModule。服务器在 Server.exe 文件中实现。EXE 模块从 CAtlAutoThreadModule 而不是从 CAtlModule 导出。

AutoThread 示例为此示例的非属性化版本。

安全说明:

提供该示例代码是为了阐释一个概念,并不代表着最安全的编码实践,因此不应在应用程序或网站中使用该示例代码。对于超出本示例代码的预期用途以外的使用所造成的偶然或继发性损失,Microsoft 不承担任何责任。

获取示例和安装示例的说明:

  • 在 Visual Studio 的“帮助”菜单上,单击“示例”。

    有关更多信息,请参见定位示例文件

  • 示例的最新版本和完整列表可以从 Visual Studio 2008 Samples page(Visual Studio 2008 示例页面)联机获取。

  • 还可以在计算机的硬盘上查找示例。默认情况下,示例和自述文件将复制到 \Program Files\Visual Studio 9.0\Samples\ 下的文件夹中。对于 Visual Studio 速成版,所有示例都位于联机位置。

生成并运行此示例

  1. 打开解决方案文件 AutoThread.sln。

  2. 在“生成”菜单中,单击“生成解决方案”。这将生成并注册客户端和服务器。

  3. 启动 ActiveX 控件测试容器的两个实例。有关如何访问测试容器的信息,请参见用测试容器测试属性和事件

  4. 将其中一个客户端控件(CAutoCtl 类)插入到每个测试容器中。

  5. 单击其中一个控件,注意服务器在一秒钟内返回。

  6. 定位和调整测试容器的大小,使它们两个同时可见。

  7. 单击其中一个控件,然后快速单击另一个控件。注意,它们几乎同时结束等待。(如果没有使用 CComAutoThreadModule,则第一个控件在一秒钟后结束,而第二个控件直到第一个控件结束后整整一秒钟后才结束。第二个休眠调用直到第一个结束后才发生。) 可以使用 Delay(PropGet)Delay(PropPut) 方法调整服务器休眠的毫秒数。如果设置适当,第二个休眠调用可以先于第一个休眠调用返回。

示例的工作机制

服务器接口具有单个方法:Sleep。该方法使服务器线程休眠给定的时间。该示例的客户端部分是一个 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

说明:

其中某些示例(如此示例)尚未经过修改以反映 Visual C++ 向导、库和编译器中所做的更改,但仍演示了如何完成所需的任务。

请参见

其他资源

ATL 属性示例