部分代码如下:
interface AFX_EXT_CLASS IDriver
{
virtual BOOL SendCommand(CString sInput, CString& sOutput, CString& sError,DWORD TimeOut=5000)=0;
virtual BOOL SendCommand(CString sInput, CString& sOutput,DWORD TimeOut=5000)=0;
……….
}//在Driver.h中的定义IDriver类
UINT CMultiThreadDlg::ThreadFroc(LPVOID pParam)
{
pDriver->SendCommand(“MU=5”,VEL,VELError,5000);
pDriver->SendCommand(“OM=1”,VEL,VELError,5000);
}
ThreadFroc是用AfxBeginThread函数建立的工作者线程函数,为静态的线程函数。
pDriver的定义为 IDriver *pDriver
调试时出现两个相同错误:error C2227: left of “->SendCommand” must point to class/struct/union,这里应该是静态的线程函数不能直接调用非静态成员变量造成的,问一下各位高手们,怎么样修改才能调用。
interface AFX_EXT_CLASS IDriver
{
virtual BOOL SendCommand(CString sInput, CString& sOutput, CString& sError,DWORD TimeOut=5000)=0;
virtual BOOL SendCommand(CString sInput, CString& sOutput,DWORD TimeOut=5000)=0;
……….
}//在Driver.h中的定义IDriver类
UINT CMultiThreadDlg::ThreadFroc(LPVOID pParam)
{
pDriver->SendCommand(“MU=5”,VEL,VELError,5000);
pDriver->SendCommand(“OM=1”,VEL,VELError,5000);
}
ThreadFroc是用AfxBeginThread函数建立的工作者线程函数,为静态的线程函数。
pDriver的定义为 IDriver *pDriver
调试时出现两个相同错误:error C2227: left of “->SendCommand” must point to class/struct/union,这里应该是静态的线程函数不能直接调用非静态成员变量造成的,问一下各位高手们,怎么样修改才能调用。
解决方案
20
AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority = THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL )
调用的时候,第二个参数pParam传入IDriver对象地址
然后在
UINT CMultiThreadDlg::ThreadFroc(LPVOID pParam) { IDriver* pDriver = static_cast<IDriver*>(pParam); pDriver->SendCommand("MU=5",VEL,VELError,5000); pDriver->SendCommand("OM=1",VEL,VELError,5000); }
5
5
上面都说了,用pParam传this指针,注意的是在析构前要将线程停掉。