class MyUdpSocket : public CSocket
{public:
static DWORD WINAPI ListenThread(LPVOID lpParam);
}DWORD WINAPI MyUdpSocket::ListenThread(LPVOID lpParam)


         MyUdpSocket* Listen=(MyUdpSocket*)lpParam;
char CRecvBuff[1024];
CString ip;
unsigned int  port;
while(1)
{
  Listen->ReceiveFrom(CRecvBuff,sizeof (CRecvBuff),ip,port,0);
  
}
return 1;
}
MyUdpSocket继承CSocket类。
编译通过,但执行这个线程之后,点击对话框就提示出错(不能为read),是什么问题呢?

解决方案 »

  1.   

    我点对话框没有做到什么操作,去掉ReceiveFrom就不会出错。
    我想在类里面用线程,不想用全局函数的线程
      

  2.   

    你在你的类里面又定义了一个自己类的指针,
    也没有初始化,
    这样当当然会出现read错误,明显指针出错了.用一楼的方法,
    把线程函数写成全局函数,
    把下句:
    public:
    static DWORD WINAPI ListenThread(LPVOID lpParam);
    删掉,
    DWORD WINAPI MyUdpSocket::ListenThread(LPVOID lpParam)
    改为:
    DWORD WINAPI ListenThread(LPVOID lpParam)
      

  3.   

    应该不是指针的问题,我用这个指针调用其他的函数没有问题,但调用阻塞的ReceiveFrom函数就有问题
      

  4.   

    你的情况和我前几天看到的一个非常相似。ListenThread线程放到全局函数的地方来实现,在OnReceive()的时候调用该函数即可!!如有需要要可以给你原带吗。