子线程在调用类函数时,为什么在线程中调用时,一运行到BscConnect( ncid )时就出错,连接不上了。

hgjantao 2015-10-29 03:06:51
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 );
}
...全文
311 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hgjantao 2015-10-29
  • 打赏
  • 举报
回复
子线程在调用类函数时,为什么在线程中调用TestOpenComm(1);时,一运行到BscConnect( ncid )时就出错,

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧