COM对象必须在套间中运行。套间分为单线程套间和多线程套间。在单线程套间中,套间保证COM对象实例仅有一个线程可以访问,而在多线程套间中,COM对象实例可同时被多个线程访问。因此,在多线程套间中执行的COM对象必须解决多线程访问的同步和冲突等线程安全相关问题。
引用计数器管理的实现——CComObjectRootEx
ATL使用CComObjectRootEx类来实现对COM对象计数器的管理,因此,所有的基于ATL的COM对象必须从该类继承。CComObjectRootEx类的声明和实现如下(精简):
template< class ThreadModel >
class CComObjectRootEx : public CComObjectRootBase
{
public:
typedef ThreadModel _ThreadModel;
...
ULONG InternalAddRef()
{ return _ThreadModel::Increment(&m_dwRef); } // 引用计数器m_dwRef在
// CComObjectRootBase中声明
ULONG InternalRelease()
{ return _ThreadModel::Decrement(&m_dwRef); }
};
由上述代码可见,对于CComObjectRootEx类:
1) 实现了对引用计数器递增与递减的操作,但并未实现IUn