FREETHRD 示例:带有编译器 COM 支持的多线程客户端和自由线程服务器
此示例演示带有编译器 COM 支持的多线程客户端和自由线程服务器。
此示例由以下部分组成:
Freclien(一个多线程客户端)
Freserve(一个自由线程进程内服务器)
安全说明 |
---|
此代码示例用于阐释一个概念,并且仅显示与此概念相关的代码。该代码可能不符合特定环境的安全要求,因此不应原样搬用所显示的代码。我们建议您添加安全性代码和错误处理代码,以使项目更加安全可靠。Microsoft“原样”提供此代码示例,不提供任何保证。 |
获取示例和安装示例的说明:
访问 Visual Studio 中的示例
在**“帮助”菜单上,单击“示例”**。
默认情况下,这些示例安装在 drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ 中。
- 有关此示例的最新版本以及其他示例的列表,请参见 MSDN 网站上的 Visual Studio 示例。
生成并运行示例
生成并运行此示例
打开解决方案 freethrd.sln。
生成服务器项目,然后生成客户端项目。
使该客户端项目成为启动项目(右击该项目节点,然后单击**“设为启动项目”**),然后运行该示例。
示例的工作机制
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 特性的用法。