小弟创建了一个基于对话框的工程。
定义
CWinThread *pThreadLisen; //监听线程-->_ListenTcpThread
#define PORT 34567
然后在确定按钮上有一个响应函数定义如下:
void CMyQQDlg::OnButtonConnect() //开始连接
{
// TODO: Add your control notification handler code here
if(m_nSockType==SOCK_TCP)
{ pThreadLisen=::AfxBeginThread(_ListenTcpThread,this); //开始TCP线程
          }
}
我的线程函数如下:
//TCP监听线程
UINT _ListenTcpThread(LPVOID lparam)
{
CMyQQDlg *pDlg=(CMyQQDlg *)lparam;

CSocket sockSrvr;
pDlg->m_Potr=PORT;//保存当前使用端口,用于关闭
int createSucceed=sockSrvr.Create(pDlg->m_Potr);
}
可是如下代码在调试没出错,可当运行时却出错;后来单步运行时才知是
int createSucceed=sockSrvr.Create(pDlg->m_Potr);出问题了。为什么。应怎改啊,各位大吓帮忙啊。

解决方案 »

  1.   

    我就是想问,为什么如下代码放在线程函数内就错,而放在类的成员函数就不会出错呢?
    CSocket sockSrvr;
    pDlg->m_Potr=PORT;//保存当前使用端口,用于关闭
    int createSucceed=sockSrvr.Create(pDlg->m_Potr);
      

  2.   

    因为CSocket需要一个默认窗口支持的,在对话框里面创建,对话框窗口就是默认窗口在线程里面创建,它找不到默认窗口了建议在对话框里面创建之后,将对话框类指针传到线程中去
    然后通过对话框指针访问CSocket对象进行编程
      

  3.   

    nuaawenlin(飘人)
    能具体说明如和用代码实现吗
      

  4.   

    我在调用如下函数时不是已经把该对话框类的指针传过去了嘛
    pThreadLisen=::AfxBeginThread(_ListenTcpThread,this);