UINT CMyDlg::senddata(LPVOID pParam )
{  singllock->Lock();
Mysocket->Accept(sockRecv);
sockRecv.Send((char *)lpbuf,256,0);
singllock->Unlock();
//return 0;
}
UINT CMyDlg::receivedata(LPVOID pParam )
{singllock->Lock();
int i=sockRecv.Receive((char *)lpbuf,256,0);
CString str="";
for(int k=0;k<i;k++)
{str+=lpbuf[k];}
AfxMessageBox((char)i);
AfxMessageBox(str);
singllock->Unlock();
//return 0;
}void CMyDlg::beginthread()
{HWND  handlwnd=GetSafeHwnd();  
AfxBeginThread(receivedata,handlwnd,THREAD_PRIORITY_NORMAL,0,NULL);
AfxBeginThread(senddata,handlwnd,THREAD_PRIORITY_NORMAL,0,NULL);
}
我运行之后出现D:\Microsoft Visual Studio\MyProjects\&Ecirc;&Oacute;&AElig;&micro;&Aacute;&Auml;&Igrave;ì&Iuml;&micro;&Iacute;&sup3;\&Ecirc;&Oacute;&AElig;&micro;·&thorn;&Icirc;&ntilde;&para;&Euml;&Iuml;&micro;&Iacute;&sup3;\&Ecirc;&Oacute;&AElig;&micro;·&thorn;&Icirc;&ntilde;&para;&Euml;&Iuml;&micro;&Iacute;&sup3;Dlg.cpp(238) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
D:\Microsoft Visual Studio\MyProjects\&Ecirc;&Oacute;&AElig;&micro;&Aacute;&Auml;&Igrave;ì&Iuml;&micro;&Iacute;&sup3;\&Ecirc;&Oacute;&AElig;&micro;·&thorn;&Icirc;&ntilde;&para;&Euml;&Iuml;&micro;&Iacute;&sup3;\&Ecirc;&Oacute;&AElig;&micro;·&thorn;&Icirc;&ntilde;&para;&Euml;&Iuml;&micro;&Iacute;&sup3;Dlg.cpp(239) : error C2665: 'AfxBeginThread' : none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
Error executing cl.exe.
这是为什么?

解决方案 »

  1.   

    几个问题:
    1。不要跨线程传递CSOCKET对象,改传SOCKET句柄
    2。线程函数需为全局函数或类的静态成员函数
    3。AfxBeginThread((AFX_THREADPROC)receivedata,);
      

  2.   

    应该是参数不对,还有你的senddata,receivedata函数不应该是成员函数,应该是全局函数或者静态的成员函数。以senddata为例:
    UINT senddata(LPVOID pParam )

        singllock->Lock();
        Mysocket->Accept(sockRecv);
        sockRecv.Send((char *)lpbuf,256,0);
        singllock->Unlock();
    }AfxBeginThread(senddata,LPVOID(Mysocket), THREAD_PRIORITY_NORMAL,0, NULL );
      

  3.   


     UINT senddata(LPVOID pParam )
    {  SOCKET mytwosocket=(SOCKET)pParam;
    CSocket mysocket;
    mysocket.Attach(mytwosocket);
    CMutex Mutex(TRUE,NULL,NULL);
    CSingleLock singllock(&Mutex,TRUE);
    singllock.Lock();
    char lpbuf[256];
    mysocket.Send(lpbuf,256,0);
    singllock.Unlock();
    return 0;
    }
     UINT receivedata(LPVOID pParam )
    { CString str="";
     CMutex Mutex(TRUE,NULL,NULL);
    CSingleLock singllock(&Mutex,TRUE);
    singllock.Lock();
    SOCKET mytwosocket=(SOCKET)pParam;
    CSocket mysocket;
    mysocket.Attach(mytwosocket);
    char lpbuf[256];
    int i=recv ( mytwosocket,lpbuf,256,0);
    //int i=mysocket.Receive(lpbuf,256,0);
    for(int k=0;k<i;k++)
    {str+=lpbuf[k];}
    singllock.Unlock();
    //AfxMessageBox((char)i);
    Sleep(1000);
    AfxMessageBox(str);
    // GetChCPStatus RefreshStatus
    return 0;
    }
     void CMyDlg::beginthread()
    {//HWND  handlwnd=GetSafeHwnd();  
    AfxBeginThread((AFX_THREADPROC)receivedata,(LPVOID)mytosocket,THREAD_PRIORITY_NORMAL,0,NULL);
    }void CMyDlg::OnCancel() 
    {//int kk=sockRecv.Send((char *)lpbuf,256,0);
    // TODO: Add extra cleanup here
    AfxBeginThread((AFX_THREADPROC)senddata,(LPVOID)mytosocket,THREAD_PRIORITY_NORMAL,0,NULL);
    // CDialog::OnCancel();
    }
    编译和运行时都没出错,但在接收数据时总不能接收完。