问题:怎么在静态线程函数里访问其他类的非静态成员函数?
描述:
DWORD WINAPI Cfun::TalkThread(LPVOID p) //静态函数
{
CSBSession pTalkSession;
pTalkSession.Create(); //出错
}
class CSBSession
{
public:
void Create();
};
解决方案1:
传对象指针
解决方案2:
查查m_SBSession变量的生存周期,是否在线程创建后就释放了
解决方案3:
用友元的函数试一下,加上关键字friend
解决方案4:
既然有了AfxSocketInit,还creat干嘛?
creat到底是个什么错误呢?、
解决方案5:
实在不行 就用全局的变量
CSBSession* pTalkSession;
解决方案6:
实现这个有几个办法:
1,申明为友元函数,
2,将对象指针传递进去,然后在线程函数中,强制转换(这个有时用起来会有问题)
3,将handle传递进去,然后需要调用时,通过handle传递出来,在外面调用类的函数(这个方法推荐使用)
解决方案7:
pTalkSession.Create(); //出错
这并不是说不能调,而是create函数有问题,可以跟踪一下
解决方案8:
CSBSession m_SBSession;
Cfun::CreateSessionThread()
{
CreateThread(..,&m_SBSession,..);//将m_SBSession作为参数传入
}
DWORD WINAPI Cfun::TalkThread(LPVOID p)
{
CSBSession* pTalkSession = (CSBSession*)p;
pTalkSession->Create();
}
class CSBSession
{
public:
void Create();
};
解决方案9:
线程参数中传递对象的指针。
解决方案10:
http://search.csdn.net/Expert/topic/1084/1084257.xml?temp=7.412356E-02