某COM组件CA实现了IA接口,同时该组件聚合了IB接口(IB接口的ThreadingModal有可能不同于IA接口的ThreadingModal)。
IB接口有一个IB_Func1函数。IA接口有一个函数IA_Func1,CA的实现如下:
class CA
{
//...
void CA_Method1();
private:
long m_nValue;
IB *m_pIB;
};
HRESULT CA::IA_Func1()
{
CreateThread(NULL,0,threadProc,this,0,NULL);
return S_OK;
}
unsigned long CA::threadProc(LPVOID param)
{
CA *pCA = (CA*)param; //这个转换不确定是否能成功(STA、MTA、DCOM远程组件)
pCA->CA_Method1(); //由于上面的不确定,这里也不确定是否能成功调用
InterlockedIncreament(&pCA->m_nValue); //同上
pCA->m_pIB->IB_Func1(); //这个就更悬了
return 0;
}
这样能在各种环境(STA/MTA)下正确运行吗?
如果不能的话,注释掉CA->m_pIB->IB_Func1();之后是否能在各种环境(STA/MTA)下成功运行呢?
IA的ThreadingModal对上述两个问题的答案有影响吗?
困扰很久了,一直无法确定答案。
如果不行的话:由于IA_Func1是个很耗时的操作,所以必须开启工作线程。在工作线程中如何才能安全的访问到IB接口(CA组件聚合的)以及CA类的辅助函数呢?
MaRs``