1>.\serverDlg.cpp(163) : error C2664: “_beginthreadex”: 不能将参数 3 从“unsigned int (__stdcall CserverDlg::* )(LPVOID)”转换为“unsigned int (__stdcall *)(void *)”
1>        没有使该转换得以执行的上下文
===============
code
================
.h  文件:unsigned int  WINAPI WorkerThread(LPVOID lpParam);
.cpp 文件:
  unsigned ThreadID;
  HANDLE pThread=(HANDLE)_beginthreadex(NULL,0,&CserverDlg::WorkerThread,&m_client,CREATE_SUSPENDED, &ThreadID);
  if(!pThread){
closesocket(m_client);
GetDlgItem(IDC_STATIC1)->SetWindowTextW(_T("线程没有工作成功..."));
continue;
  }
  
unsigned int  CserverDlg::WorkerThread(LPVOID lpParam){
  SOCKET m_client = (SOCKET) (*lpParam);
  WSAData wsaData;
  if(WSAStartup(MAKEWORD(2,2), &wsaData)){
    closesocket(m_client);
    _endthreadex(1);
    return 1;
  }  packet A;
  char *P = (char *) &A;
  int len = sizeof(A);
  while(len){
    int ret = recv(m_client, P, len, 0);
    if(SOCKET_ERROR == ret){
      GetDlgItem(IDC_STATIC1)->SetWindowTextW(_T("数据接收的时候发生了错误..."));
      break;
    }
    if(!ret){
      GetDlgItem(IDC_STATIC1)->SetWindowTextW(_T("和客户端的连接中断!..."));
      break;
    }
    len -= ret;
    P += ret;
if(len == 0){ //接收成功
CString tmp;
tmp.Format(_T("线程:[%d],接收到了客户端[%d]的数据,head为:[%s]"),GetCurrentThreadId,m_client,A.addHeader);
GetDlgItem(IDC_STATIC1)->SetWindowTextW(tmp);
}
  }
//  closesocket(_client);
  //WSACleanup();
  _endthreadex(0);
}

解决方案 »

  1.   

    声明static unsigned int  WINAPI WorkerThread(LPVOID lpParam); 或者不要把线程函数放在类中,要访问类成员的话,可声明为友元friend
      

  2.   

    声明为静态
    static DWORD __stdcall CserverDlg::WorkerThread(LPVOID lpParam);
      

  3.   

    static  unsigned int  WINAPI WorkerThread(LPVOID lpParam); 
      

  4.   

    typedef unsigned (__stdcall *PTHREAD_START) (void *);(PTHREAD_START)CserverDlg::WorkerThread