WEB开发网
开发学院软件开发VC 理解 COM 套间 阅读

理解 COM 套间

 2006-07-22 22:58:03 来源:WEB开发网   
核心提示: 三、套间如何实现数据的同步我们已经知道套间的目的是用来实现数据的同步,那么套间如何来实现呢?如果我们能保证COM对象中的函数只能在该对象中的另一个函数执行完以后,理解 COM 套间(8),才能开始执行(也就是说组件中的函数只能一个一个的执行),那么我们的问题就可以解决了,而不再直接访问对象

三、套间如何实现数据的同步

我们已经知道套间的目的是用来实现数据的同步,那么套间如何来实现呢?如果我们能保证COM对象中的函数只能在该对象中的另一个函数执行完以后,才能开始执行(也就是说组件中的函数只能一个一个的执行),那么我们的问题就可以解决了。是的,你可以发现,这样的话,就失去了多线程的优势;但套间的目的是保证小概率下的线程安全,损耗一些性能,应该比出现逻辑错误强点。

那么又如何保证同一对象下的所有方法都必须按顺序逐个执行呢?微软的COM API设计者们借用了Windows的消息机制。我们先来看一下windows的消息机制图。

我们可以看到所有线程发出的消息都回首先放到消息队列中,然后在通过消息循环分发到各自窗口去,而消息队列中的消息只能一个处理完后再处理另一个,借助消息机制,就可以实现COM的函数一个一个的执行,而不会同时运行。Windows的消息机制是通过窗口来实现的,那么一个线程要接收消息,也应该有一个窗口。 COM API的设计者在它们的API函数中实现了一个隐藏的窗口。在我们调用CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)的时候,会生成这个窗口。(如果你对softice等动态调试工具熟悉的话,可以通过跟踪源码来跟踪CoInitializeEx函数,可以发现它会调用API函数CreateWindowEx)。该窗口是隐藏的,有了这个窗口,就可以支持消息机制,就有办法来实现对象中函数的逐一执行。这样当对象指针被传到其它线程的时候,从外部调用该对象的方法的时候,就会先发一个消息到原线程,而不再直接访问对象了。套间的原理大致就是这样。我们再来看看COM中的套间类型。

上一页  3 4 5 6 7 8 9 10  下一页

Tags:理解 COM 套间

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接