(1)异步com回调和异步其实没有关系的。但是comz中的事件有了 异步这个概念,我觉得,异步必然有非用户创建的线程存在(即:线程不是我们创建的, com本身已经帮你创建了), 所以才有异步这个概念。
异步和回调没有必然关系,同步也可以回调。(2)com中的套间 与线程套间的出现是为了解决多线程中调用com防止 race condition的出现。当然写代码的时候,完全可以不用套间,比如我们自己加锁来解决。似乎com为了方便程序员使用,提出套间这个概念来,既解决了race condition,又解决了使用方便的问题。(3)com事件的概念传统的win32编程,事件的概念无非是 某个消息产生了,然后一些列动作产生。这个叫事件,请对比:点击一个按钮
后, 某事件产生。        来理解事件这个概念。但是com 事件却是很诡异。   到底是什么事件? 谁产生?有人说是com产生的。 win32中的按钮点击,产生的一个事件,是同步?异步? 同步!  但是com的事件呢?同步?异步?似乎是异步。

解决方案 »

  1.   

    com 是一个二进制组件标准, Don Box 说她是更好的 c++,
    在基本概念上是一致的不过他后来有说, .net 是更好的 com,
    事实却是, windows 可以没有 .net, 
    但不能没有 com.
      

  2.   

    com与c++有一定关系,没有太多,否则linux平台也可以做了。
    谢谢你的 回复另外:如果知道我的3问题的答案,请解答。谢谢了。
      

  3.   

    你说的 com 事件是 com+ 事件,
    还是 连接点 / 接收器 那个.
      

  4.   

    连接点 / 接收器 这个。
    顺便再问一个, 为什么com中的事件是 异步的?貌似从一般的资料都可以以后这个个结论。但是如果让你设计的话,你如何让其成为异步?我记得一个前辈说过, 异步 这个东西,表面看其来,没有线程, 实际上是靠线程实现的。回到com事件来, 那么就说明了, com的事件 是 靠windows创建了线程实现的。这是我的理解,不知道对否?
      

  5.   

    是的, 异步框架看起来没涉及到线程, 所接触的都是使用线程实现的,
    .net 中 Async 系列同样也是,win32 多线程程序设计
    windows 并发程序设计指南
     也都是这么说的.com 事件未必都是异步的,
    要看具体的某个事件是不是.你比如说 mshtml,
    在程序创建组件之前, 只有最少的2个线程,
    一旦创建, 线程马上变得好多.
      

  6.   

    你说的我大多赞成,至于 com下的事件 是同步的,我似乎还没有见过。
    传统的win32编程,事件的概念无非是 某个消息产生了,然后一些列动作产生。这个叫事件,请对比:点击一个按钮
    后, 某事件产生。 来理解事件这个概念。这些都是同步的, 并没有涉及到什么线程, 我觉得 mfc里的很多事件 也是同步的,否则光 线程就要有很多,这样的可能性为0.
      

  7.   

    贴文章, 还有一些书籍,com中的事件基本就是 异步的, 如果是同步的根本没必要搞那么多,  搞了这么复杂的。比如:在客户端可以提供一个 com接口的派生类, 在com中使用这个接口, 调用虚函数我们再客户端中调用 该虚函数即可。所谓回调机制。
      

  8.   

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

  9.   

    要给分才行啊?呵呵
    com的实现还是挺复杂的,虽然对开发者来说只是一个类的框架。抛开所有关于com产生的原因以及作用不说,你只要回答出为什么跨进程会出现多个线程,你就明白为什么会有同步和异步的差别了。因为跨进程没那么容易,不管你使用任何方法,服务器与客户端都会类似s/c这样的关系。所以会有poxy和stub。如果不跨进程或者其他高级特性,没有必要使要用com。com本身就是一套类框架,使用的C++特性,类写的非常漂亮