class CBoardPort
{
public:
CBoardPort();
virtual ~CBoardPort();
protected:
CWinThread *m_pProtThread;
static UINT CBoardPort::LoopProtThread(LPVOID lParam);
void SetIoOutState(void);
void GetIOInState(void);
void SetDAOutState(void);
};/////////////////////////////
LPVOID pParam = NULL;
int nPriority = THREAD_PRIORITY_ABOVE_NORMAL;
UINT nStackSize = 0;
DWORD dwCreateFlags = 0;
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ;
m_pProtThread =AfxBeginThread(CBoardPort::LoopProtThread,pParam,nPriority , nStackSize, dwCreateFlags , lpSecurityAttrs);
//////////////////
UINT CBoardPort::LoopProtThread(LPVOID lParam)
{
while(1)
{
SetDAOutState();
GetIOInState();
SetIoOutState();
Sleep(0); //暂时将线程时间交给其他线程(必须的)
}
return 0;
}报错:
: error C2352: 'CBoardPort::SetDAOutState' : illegal call of non-static member function
error C2352: 'CBoardPort::GetIOInState' : illegal call of non-static member function
error C2352: 'CBoardPort::SetIoOutState' : illegal call of non-static member function问:定义static UINT CBoardPort::LoopProtThread(LPVOID lParam);有问题?如果不定义静态就出错,问题在哪里?
{
public:
CBoardPort();
virtual ~CBoardPort();
protected:
CWinThread *m_pProtThread;
static UINT CBoardPort::LoopProtThread(LPVOID lParam);
void SetIoOutState(void);
void GetIOInState(void);
void SetDAOutState(void);
};/////////////////////////////
LPVOID pParam = NULL;
int nPriority = THREAD_PRIORITY_ABOVE_NORMAL;
UINT nStackSize = 0;
DWORD dwCreateFlags = 0;
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL ;
m_pProtThread =AfxBeginThread(CBoardPort::LoopProtThread,pParam,nPriority , nStackSize, dwCreateFlags , lpSecurityAttrs);
//////////////////
UINT CBoardPort::LoopProtThread(LPVOID lParam)
{
while(1)
{
SetDAOutState();
GetIOInState();
SetIoOutState();
Sleep(0); //暂时将线程时间交给其他线程(必须的)
}
return 0;
}报错:
: error C2352: 'CBoardPort::SetDAOutState' : illegal call of non-static member function
error C2352: 'CBoardPort::GetIOInState' : illegal call of non-static member function
error C2352: 'CBoardPort::SetIoOutState' : illegal call of non-static member function问:定义static UINT CBoardPort::LoopProtThread(LPVOID lParam);有问题?如果不定义静态就出错,问题在哪里?
1、定义static UINT CBoardPort::LoopProtThread(LPVOID lParam);定义的时候在类内部,不需要类名加域作用符吧
2、静态方法里不能调用非静态的方法吧
{
CBoardPort* pDlg = (CBoardPort*)lParam; //获取类句柄转换
while(1)
{
pDlg->SetDAOutState();
pDlg->GetIOInState();
pDlg->SetIoOutState();
Sleep(0); }
return 0;
}m_pProtThread =AfxBeginThread(LoopProtThread,pParam,nPriority , nStackSize, dwCreateFlags , lpSecurityAttrs)error C2248: 'SetDAOutState' : cannot access protected member declared in class 'CBoardPort'
error C2248: 'GetIOInState' : cannot access protected member declared in class 'CBoardPort'
的时候就不用传递一个额外的this指针.public:
void SetIoOutState(void);
void GetIOInState(void);
void SetDAOutState(void); UINT CBoardPort::LoopProtThread(LPVOID lParam)
{
CBoardPort* pClass = (CBoardPort*)lParam; //获取从类句柄转换
while(1)
{
pClass->SetDAOutState();
pClass->GetIOInState();
pClass->SetIoOutState();
Sleep(0); }
return 0;
}
就OK了