子线程在调用类函数时,为什么在线程中调用时,一运行到BscConnect( ncid )时就出错,连接不上了。
void RobotStatus::OnBnClickedButtonstatus()
{
m_pThread=AfxBeginThread(ThreadProc, (LPVOID)this->m_hWnd,0,0,0);
}
UINT ThreadProc(LPVOID pParam) //在线程函数中调用窗口类事件
{
while(1)
{
RobotStatus * _this = (RobotStatus *)CWnd::FromHandle((HWND)pParam);
_this->Status();
Sleep(1000);
}
return 0;
}
void RobotStatus::Status(void)
{ short rc;
short nCid;
nCid = TestOpenComm(1);
if(BscGetStatus(nCid,&d1,&d2)==0)
{ if( (d1&128)/128==1)
{
current_mode+="Command remote\r\n";
}
if((d1&64)/64==1)
{
current_mode+="Play\r\n";
}
if((d1&32)/32==1)
{
current_mode+="Teach\r\n";
}
short RobotStatus::TestOpenComm(int mode)
{
short ncid;
short rc;
char cur_dir[_MAX_DIR];
char *IPAddress= TEST_IP_ADDRESS;
_getcwd( cur_dir, sizeof(cur_dir) );
if( mode==0 )
{
ncid = BscOpen( cur_dir, PACKETCOM );
if( ncid < 0 )
{
return( ncid );
}
rc = BscSetCom( ncid, 1, 9600, 2, 8, 0 );
if( rc != 1 )
{
rc = BscClose( ncid );
return( -1 );
}
} else
{
ncid = BscOpen( cur_dir, 16 );
if( ncid < 0 )
{
return( ncid );
}
// rc = BscSetEther( ncid, IPAddress, 0, GetSafeHwnd() );
rc = BscSetEther( ncid,"192.168.2.4", 0, this->m_hWnd);
if( rc != 1 )
{
rc = BscClose( ncid );
return( -1 );
}
}
rc = BscConnect( ncid );
if( rc != 1 )
{
rc = BscClose( ncid );
return( -1 );
}
return( ncid );
}
short RobotStatus::TestCloseComm(short ncid)
{
short rc;
rc = BscDisConnect( ncid );
rc = BscClose( ncid );
return( rc );
}