beginthreadex

yize.link 2008-05-23 01:16:43
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);
}
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolerhero 2008-05-26
  • 打赏
  • 举报
回复
typedef unsigned (__stdcall *PTHREAD_START) (void *);

(PTHREAD_START)CserverDlg::WorkerThread
abomber2 2008-05-26
  • 打赏
  • 举报
回复
static unsigned int WINAPI WorkerThread(LPVOID lpParam);
stivenjia 2008-05-23
  • 打赏
  • 举报
回复
声明为静态
static DWORD __stdcall CserverDlg::WorkerThread(LPVOID lpParam);
greatws 2008-05-23
  • 打赏
  • 举报
回复
声明static unsigned int WINAPI WorkerThread(LPVOID lpParam);

或者不要把线程函数放在类中,要访问类成员的话,可声明为友元friend
fairyprince 2008-05-23
  • 打赏
  • 举报
回复
线程函数是类成员的话要是静态函数

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧