理解 COM 套间
2006-07-22 22:58:03 来源:WEB开发网核心提示: 如上所示我们通过在代码中加入EnterCriticalSection和LeaveCriticalSection来实现对数据的保护,如果我们只在程序开头和结尾填加这两个函数的话,理解 COM 套间(6),也不会太复杂,但是这样也就失去了多线程的意义,该程序有一个接口(ITestInterfa
如上所示我们通过在代码中加入EnterCriticalSection和LeaveCriticalSection来实现对数据的保护,如果我们只在程序开头和结尾填加这两个函数的话,也不会太复杂,但是这样也就失去了多线程的意义。程序不会更快,反而会变慢。所以我们必须在所有需要保护的地方,对我们的操作进行保护。程序如果庞大的话,这将是一个烦琐而枯燥的工作,而且很容易出错。如果是我们自己使用的类的话,我们可以选择不使用多线程,但组件是提供给别人用的。开发者无法阻止组件使用者在多线程程序中使用自己提供的组件,这就要求组件必须是多线程安全的。但并不是每个开发者都愿意做这样的工作,微软的COM API设计者为了平衡这个问题,就提出了套间的概念。
注意:以上只是一个简单的例子,事实上多线程中需要保护的部分一般集中在全局数据和静态数据之上,因为这样的数据每个进程只有一份,如上所示的g_i。(想对多线程程序有更深入的认识,可以找侯捷翻译的《Win32多线程程序设计》看看,90年代出的书,到现在还畅销,足可以说明它的价值)
二、套间所要解决的问题
从多线程的描述中,我们知道,套间所要解决的问题是帮助组件的开发者在实现多线程下调用组件时候的同步问题。我们还是先看一段简短的程序。
我们首先使用ATL创建一个简单的组件程序,该程序有一个接口(ITestInterface1),该接口支持一个方法TestFunc1。(该组件可以在附加的源码的“Apartment\TestComObject1”目录下找到)我们通过以下的程序调用该组件。(该程序可以在附加的源码的“Apartment\ErrorUseApartment”目录下找到)
更多精彩
赞助商链接