程序有主窗口,弹出模式窗口CDlgp2p(聊天),该窗口创建线程AcceptThread,该线程声明为CDlgp2p类的友元,此时在线程AcceptThread中调用CDlgp2p类的ShowRecvData()函数显示接收到的聊天内容,到这里都没有错误,但是在ShowRecvData()函数中使用m_show.SetWindowText(m_showstr);改变Cedit(聊天内容框)值时,出现断言失败(运行时错误),应该是句柄无效,想问怎样改变窗口CDlgp2p中Cedit控件的值?
另外不用友元获取对话框指针的方法也是不行。
UINT AcceptThread(LPVOID lpvoid)
{
int Addrlength=sizeof(m_raddr);
m_socket=accept(m_hSocket,(LPSOCKADDR)&m_raddr,&Addrlength);
if(m_socket==INVALID_SOCKET)
{
closesocket(m_hSocket);
m_socket=NULL;
AfxMessageBox("Accept Error");
return 0;
}
AfxBeginThread(AcceptThread,NULL);
char buff[1024];
int ret=recv(m_socket,buff,1024,0);
if(ret==0||ret==SOCKET_ERROR)
{
closesocket(m_socket);
AfxMessageBox("recv bad");
return 0;
}
if(buff!=NULL)
{
int msgleng=0;
int nameleng=0;
int i;
nameleng=buff[0];
name=new char[nameleng+1];
for(i=0;i<nameleng;i++)
{name[i]=buff[i+1];}
msgleng=buff[nameleng+1];
message=new char[msgleng+1];
for(i=0;i<msgleng;i++)
{
message[i]=buff[i+2+nameleng];
}
name[nameleng]='\0';
message[msgleng]='\0';
CDlgP2P p2p;
p2p.ShowRecvData();
}
return 0;
}void CDlgP2P::ShowRecvData()
{
CString tempstr;
tempstr="";
//m_show.SetWindowText("");
//m_show.Clear();
if(name!=NULL&&message!=NULL)
{
tempstr=name;
m_showstr=message;
m_showstr=tempstr+":"+m_showstr;
AfxMessageBox(m_showstr);
m_show.SetWindowText(m_showstr);//这句造成断言失败,难道原因是此时控件尚未创建?
//UpdateData(FALSE);
message=NULL;
name=NULL;
}
}
另外不用友元获取对话框指针的方法也是不行。
UINT AcceptThread(LPVOID lpvoid)
{
int Addrlength=sizeof(m_raddr);
m_socket=accept(m_hSocket,(LPSOCKADDR)&m_raddr,&Addrlength);
if(m_socket==INVALID_SOCKET)
{
closesocket(m_hSocket);
m_socket=NULL;
AfxMessageBox("Accept Error");
return 0;
}
AfxBeginThread(AcceptThread,NULL);
char buff[1024];
int ret=recv(m_socket,buff,1024,0);
if(ret==0||ret==SOCKET_ERROR)
{
closesocket(m_socket);
AfxMessageBox("recv bad");
return 0;
}
if(buff!=NULL)
{
int msgleng=0;
int nameleng=0;
int i;
nameleng=buff[0];
name=new char[nameleng+1];
for(i=0;i<nameleng;i++)
{name[i]=buff[i+1];}
msgleng=buff[nameleng+1];
message=new char[msgleng+1];
for(i=0;i<msgleng;i++)
{
message[i]=buff[i+2+nameleng];
}
name[nameleng]='\0';
message[msgleng]='\0';
CDlgP2P p2p;
p2p.ShowRecvData();
}
return 0;
}void CDlgP2P::ShowRecvData()
{
CString tempstr;
tempstr="";
//m_show.SetWindowText("");
//m_show.Clear();
if(name!=NULL&&message!=NULL)
{
tempstr=name;
m_showstr=message;
m_showstr=tempstr+":"+m_showstr;
AfxMessageBox(m_showstr);
m_show.SetWindowText(m_showstr);//这句造成断言失败,难道原因是此时控件尚未创建?
//UpdateData(FALSE);
message=NULL;
name=NULL;
}
}
应该怎么传CDlgP2P的指针啊?