比方说
类生命
Class CNetStat
{
UINT NbtstatThread(LPVOID param);
bool NetConnect();
}
定义:
bool CNetStat::NetConnect()
{
.....
::AfxBeginThread(NbtstatThread,m_hWnd,THREAD_PRIORITY_NORMAL);
.....
}UINT CNetStat::NbtstatThread(LPVOID param)
{
.....
}这样可以吗?如果可以的话,我就是这样做的,为什么会编译错误
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
这算是什么问题呢???
急啊,救命啦
类生命
Class CNetStat
{
UINT NbtstatThread(LPVOID param);
bool NetConnect();
}
定义:
bool CNetStat::NetConnect()
{
.....
::AfxBeginThread(NbtstatThread,m_hWnd,THREAD_PRIORITY_NORMAL);
.....
}UINT CNetStat::NbtstatThread(LPVOID param)
{
.....
}这样可以吗?如果可以的话,我就是这样做的,为什么会编译错误
error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
这算是什么问题呢???
急啊,救命啦
{
.....
}改为:UINT NbtstatThread(LPVOID param)
{
.....
}
{
static UINT NbtstatThread(LPVOID param);
bool NetConnect();
}
定义:
bool CNetStat::NetConnect()
{
.....
::AfxBeginThread(NbtstatThread,m_hWnd,THREAD_PRIORITY_NORMAL);
.....
}UINT CNetStat::NbtstatThread(LPVOID param)
{
.....
}
难道声明一个全局的CNetStat对象??不会吧????
这样不是。
一定要这样写吗??
class CA
{
int function(int n);
}
所以以上function编译后的实际原形是:
int function(CA*, int)
要去掉隐藏参数,可以在成员函数声明时加上static,成为静态成员.
但静态成员不能随意访问类的其他非静态成员.
所以必须将this指针显式地传给函数.
如一种典型的做法:
class CA
{
void StartThread();
static UINT ThreadProc(LPVOID pParam);
};
UINT CA::ThreadProc(LPVOID pParam)
{
CA *pThis = (CA*)pParam;
....
}
void CA::StartThread()
{
::AfxBeginThread(ThreadProc, this, THREAD_PRIORITY_NORMAL);
}