关于COM 线程模型的概念性问题
小弟刚开始学习COM,有些线程模型问题不太清楚,请诸大虾指点一二:
1)如果我实现的一个组件做到 1.组件只包含一个线程 2.无论是组件还是客户都用CoIntialize初始化
那么可否说我的这个组件的线程模型是 Apartment ?
2)现按上述条件实现一个组件 C,实现一个接口 IX,接口中包含两个方法:A 和 B。A 中延时5秒,B 立即返回。
编译之得到组件及其代理。
在客户中,除自己的主线程 th0 外我额外创建一个线程称 th1,并且在 th1 中创建组件 C,并将 IX marshal给th0
这时无论我在 th0 还是 th1 中调用立即返回的IX::B,耗时都是10 ~ 20 ms。
如果我按下列顺序调用(在th0和th1均已得到了IX后):
1.首先在th1中调用延时5秒的IX::A
2.然后在th0中调用立即返回的IX::B
虽然调用发生在两个并发的线程中,但由于组件的线程模型为 Apartment (所有的COM初始化都调用CoIntialize),
故th0中的IX::B的调用其实会被COM转发到th1中进行,但由于th1此时正处在IX::A的5秒延时中,所以IX::B必须等待,
这样th0中的IX::B的调用应该超过5秒才对,但我却依然得到了20ms的结果,请问为什么?
估计我的概念上还有不清楚和错误的地方,股恳请诸大虾给我解惑!谢谢!