【发布时间】:2014-05-16 20:43:57
【问题描述】:
ATL COM 服务器中的一段典型代码触发事件如下所示(从this question 复制并稍作修改):
HRESULT Fire_MessageTrigger()
{
HRESULT hr = S_OK;
T * pThis = static_cast<T *>(this);
int count = m_vec.GetSize();
for (int i = 0; i < count; i++)
{
pThis->Lock(); // I'm asking about this...
CComPtr<IUnknown> punkConnection = m_vec.GetAt(i);
pThis->Unlock(); // and this
IDispatch* pConnection = static_cast<IDispatch *>(punkConnection.p);
if (pConnection == 0)
continue;
DISPPARAMS params = { NULL, NULL, 0, 0 };
hr = pConnection->Invoke(2, IID_NULL, LOCALE_USER_DEFAULT,
DISPATCH_METHOD, ¶ms, 0, NULL, NULL);
}
return hr;
}
Lock() 和 Unlock() 调用的目的是什么?
【问题讨论】:
标签: c++ events visual-c++ com atl