FREETHRD 示例:带有编译器 COM 支持的多线程客户端和自由线程服务器

更新:2007 年 11 月

此示例演示带有编译器 COM 支持的多线程客户端和自由线程服务器。

此示例由以下部分组成:

  • Freclien(一个多线程客户端)

  • Freserve(一个自由线程进程内服务器)

安全说明:

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

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

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

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

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

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

生成并运行示例

生成并运行此示例

  1. 打开解决方案 freethrd.sln。

  2. 生成服务器项目,然后生成客户端项目。

  3. 使该客户端项目成为启动项目(右键单击该项目节点,然后单击“设为启动项目”),然后运行该示例。

示例的工作机制

Freclien 示例生成多个线程来创建和使用由 Freserve 自由线程服务器提供的 COBall COM 对象。COBall 对象本身不生成任何线程,而是被动地响应来自许多可能的客户端线程的 IBall 接口请求。Freclien 客户端通过 COBall 对象公开的 IBall 接口创建和控制该对象。在 Freclien 的三个线程通过调用 IBall::Move 移动球时,其余的主线程使用系统计时器来获取对 COBall 对象的位置、大小和颜色的定时更新。该主线程使用通过调用 IBall::GetBall 获取的数据,在客户端的主窗口显示球的图形化快照图像。

在 Freserve 示例中,COBall 对象在内部更新其颜色属性以反映最后一个调用对象的 Move 方法的线程。显示线程对其显示的每个球图像均使用该数据。当球移动时,会更改颜色以反映移动该球的每个线程。当球移动时,会留下一条轨迹,提供这些经过的线程的明显的可视化历史记录。这个轨迹说明:使用 COM 的自由线程模型,对同一对象作出接口请求的每个线程均访问调用线程上的对象。单个球对象的每种不同颜色代表一个不同的调用线程。

此示例使用本机编译器 COM 支持。它给出一个自定义 COM 接口的示例,该接口用自由线程的模型封送 RECT 和 POINT 结构。它演示了 #import 指令的 exclude 属性的用法。

请参见

参考

Compiler COM Support

其他资源

编译器 COM 支持示例

通用示例