com的几个小问题

com的几个问题

(1)

异步com

回调和异步其实没有关系的。

但是comz中的事件有了 异步这个概念,我觉得,异步必然有非用户创建的线程存在(即:线程不是我们创建的, 

com本身已经帮你创建了), 所以才有异步这个概念。


异步和回调没有必然关系,同步也可以回调。



(2)com中的套间 与线程

套间的出现是为了解决多线程中调用com防止 race condition的出现。

当然写代码的时候,完全可以不用套间,比如我们自己加锁来解决。

似乎com为了方便程序员使用,提出套间这个概念来,既解决了race condition,又解决了使用方便的问题。



(3)com事件的概念

传统的win32编程,事件的概念无非是 某个消息产生了,然后一些列动作产生。这个叫事件,请对比:点击一个按钮
后, 某事件产生。 来理解事件这个概念。

但是com 事件却是很诡异。 到底是什么事件? 谁产生?

有人说是com产生的。 win32中的按钮点击,产生的一个事件,是同步?异步? 同步! 但是com的事件呢?同步?异步?

似乎是异步。








------解决方案--------------------
是的, 异步框架看起来没涉及到线程, 所接触的都是使用线程实现的,
.net 中 Async 系列同样也是,

win32 多线程程序设计
windows 并发程序设计指南
 也都是这么说的.

com 事件未必都是异步的,
要看具体的某个事件是不是.

你比如说 mshtml,
在程序创建组件之前, 只有最少的2个线程,
一旦创建, 线程马上变得好多.

------解决方案--------------------
探讨

引用:

新手的福利帖啊!俺新手也来讨论咯
【1,3】我估计source属性的由双接口定义的事件都是异步的,自定义的接口就跟普通接口的调用一样是同步的。
【2】套间一定要有,自己加锁的是free线程模型。很多人都在问套间的问题,其实是或许是忘记了组件可能会在窗口过程中使用,这还是有点复杂的。看看ole或许能加深理解。


第9楼

------解决方案--------------------
事件跟同步异步没啥关系,全取决于组件实现者的做法。事件既可以是同步的,也可以是异步的。异步事件也并不一定用线程来实现,单线程一样可以实现异步事件。