1. COM线程模型
COM并没有定义新的线程和进程模型,而是直接使用Win32线程。
1.1Win32线程
典型的Win32线程具有两种不同类型的线程:用户界面线程和工作线程。用户线程是同一个或多个窗口关联着的。这些线程具有自己的消息循环,工作线程用于后台处理。一个进程可以具有多个用户界面线程和多个工作线程。
每一个用户界面线程都有一个或多个窗口,线程将调用他所拥有的窗口的窗口过程,对于任一窗口他将被创建他的线程拥有。
1.2COM线程
COM用地线程的类型与Win32的两种线程是相同的,只不过换了不同的名称。与Win32中的用户界面线程想对应COM有一个“套间线程”,而与工作线程相对应的则是一个自由线程。
1.3套间
“套间”是一个由用户界面风格的线程和一个消息循环工程的概念性实体。
12-2中表示是由一个客户和两个线程中组件工程的典型COM应用程序。这个程序将驻留在只有一个执行线程的进程中。进程中组件没有自己的消息循环。而是共享EXE客户的消息循环。
- 加入进程外组件
当客户连接到进程外组件时,组件同客户在不同的进程中运行,每个进程都有自己的执行线程。进程外服务器有它自己的消息循环。同使用进程中组件进程的另一个差别在于跨越进程边界的函数调用的参数必须被调整。
下图将是进程外组件在另外一个套间的进程中组件。
套间同单线程进程在如下方面是类似的:每一个进程都有它自己的消息循环,一个套间也可以有它自己的消息循环,同一进程中的函数调用和同一套间中的函数调用将不被调整。由于进程和套间只是一个执行线程。因此消息的同步是由保证的。
1.4套间线程
一个套间线程值的时套间中仅有的唯一线程。套间线程将拥有他所创建的组件,一个套间中的组件只能由相应的套间线程调用。假定另一个线程调用一个套间中某个组件的方法。COM将把此调用请求方到套间的队列中,消息循环将取出此调用请求并在套间线程上执行相应的方法。
1.5自由线程
COM将在套间线程中同步对组件的调用。对于自由线程创建的组件的调用,COM不能使之同步,若某个组件时有自由线程创建的,则任意线程均可在任意时候调用它。
1.6调整与同步
- 进程间的调用将被调整
- 同一线程中的调用将不被调整
- 对于自由线程中组件的调用并不是总被调整
- 对于调节线程的调用将被同步
- 同一线程中的调用将由此线程本身完成同步