摘要: 使用dll启动的组件,将和客户程序共享一个进程地址空间。所以组件的接口指针我们可以直接使用。但是如果服务器是以exe形式提供的,则客户端和服务器运行在不同的地址空间中,客户端调用服务器端的方法时就要跨越进程边界。对于调用跨进程边界的接口,我们需要考虑以下问题:6.1 问题一的解决 要想在一个进程中调用另一个进程中的函数,其实就是一种进程间通信。操作系统提供了多种执行进程间通信的方法,其中COM所使用的是本地过程调用(LPC)。那么LPC是如何实现的,这一点看似比较神奇,实际上并非如此。虽然不同的进程在不同的虚拟地址空间中,通过进程自身的能力是无法跨越进程边界的。但是进程是由操作系统创建的,进程 阅读全文
posted @ 2014-03-07 23:16 a ray of sunshine 阅读(1529) 评论(0) 推荐(0) 编辑
摘要: 5. COM中的线程 Win32中的线程,典型的Win32程序具有两种不同类型的线程:用户界面线程和工作者线程。用户界面线程是同一个或者多个窗口关联着的,这些线程具有自己的消息循环,以便能对用户输入做出反应。工作者线程用于后台处理,它们没有任何窗口与之相关联,通常也没有消息循环。 COM中使用的线程类型与Win32的两种类型的线程是相同的,只不过换了不同的名称而已。在COM中与Win32中的用户界面线程相对应是“套间线程”,而与工作者线程相对应的是自由线程。 既然COM线程与Win32线程并没有什么差别,那么为什么COM还需要定义自己的线程呢?其原因在于参数调整与线程同步。5.1 套间线程: 阅读全文
posted @ 2014-03-07 23:10 a ray of sunshine 阅读(678) 评论(0) 推荐(0) 编辑
摘要: 1. 每一个COM对象都有一个其支持的线程模型的标识,这个标示被称之为套间(apartment),常见的线程模型有单线程,多线程。则套间也被分为单线程套间(STA)和多线程套间(MTA)。如果一个COM对象属于STA,则该COM对象不支持并发操作。如果一个COM对象属于MTA,则该COM对象支持并发和重入,可以多个线程同步访问。2. 每一个COM对象都必然属于某一个套间,然而一个套间可以被多个对象所共享。每一个进程中最多可以有1个MTA, 但是一个进程可以包含多个STA。3. 同一时刻,一个线程只在一个套间中执行。一个线程要想使用COM对象,它必须先进入一个套间。① 什么叫线程进入一个套间?所 阅读全文
posted @ 2014-03-07 23:02 a ray of sunshine 阅读(414) 评论(0) 推荐(0) 编辑