线程问题

smdszgzh 2009-04-01 10:01:04
我想在单击一个按钮时创建一个纯种,然后在线程里做这些事

UINT CMySerSocketDlg::ThreadSerFuc(LPVOID pParam)//线程函数,在头文件中已声明
{
WSADATA m_data;
CString m_Msg,mMsg1;
CWnd *hwnd=GetDlgItem(IDC_EDIT);
if(WSAStartup(MAKEWORD(2,2),&m_data)!=0)
{
m_Msg="Load Socket Library failed!";
hwnd->SetWindowText(m_Msg);
return -1;

}

m_Msg="ff";
hwnd->SetWindowText(m_Msg);
SOCKET SerSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
SOCKET CliSocket;
if(INVALID_SOCKET==SerSocket)
{
m_Msg="Create Socket Failed!";
hwnd->SetWindowText(m_Msg);
return -1;
}
sockaddr_in Seraddr,Cliaddr;
Seraddr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
Seraddr.sin_family=AF_INET;
Seraddr.sin_port=htons(8000);
bind(SerSocket,(sockaddr*)&Seraddr,sizeof(Seraddr)+1);
int n=listen(SerSocket,5);
if(n==SOCKET_ERROR)
{
m_Msg="Listen failed!";
hwnd->SetWindowText(m_Msg);
return -1;
}
// m_Msg="服务器已启动,等待用户连接!";
// hwnd->SetWindowText(m_Msg);
CWnd *hwnd1=GetDlgItem(IDC_EDIT1);
while(true)
{
int m=sizeof(Cliaddr);
CliSocket=accept(SerSocket,(sockaddr*)&Cliaddr,&m);
char *recBuff=new char[100];
char *sendBuff=new char[100];
int length=_msize(recBuff);
sendBuff="Wellcom!";
send(CliSocket,sendBuff,length+1,0);
m_Msg=sendBuff;
hwnd->SetWindowText(m_Msg);
while(true)
{
recv(CliSocket,recBuff,length+1,0);
if(recBuff[0]=='q'||recBuff[0]=='Q')
{
m_Msg="用户请求退出!";
hwnd->SetWindowText(m_Msg);
return -1;
}
m_Msg=recBuff;
hwnd->SetWindowText(recBuff);
hwnd1->GetWindowText(mMsg1);
recBuff=mMsg1.GetBuffer(mMsg1.GetLength());
send(CliSocket,sendBuff,length+1,0);
mMsg1.ReleaseBuffer();
//mMsg1="";
}

}
closesocket(SerSocket);
WSACleanup();
}

void CMySerSocketDlg::OnSet()
{
AfxBeginThread(ThreadSerFuc,NULL);//创建一个线程,不知道如何传递参数了

// TODO: Add your control notification handler code here

}



提示错误 none of the 2 overloads can convert parameter 1 from type 'unsigned int (void *)'
我不知道怎么传递这个参数了,请高手指教,还有VC6里如果让代码对齐??
...全文
55 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
homesos 2009-04-01
  • 打赏
  • 举报
回复

//UINT CMySerSocketDlg::ThreadSerFuc(LPVOID pParam)
//改为:
UINT ThreadSerFuc(LPVOID pParam)

  • 打赏
  • 举报
回复
是否声明为static成员函数

alt+F8
oyljerry 2009-04-01
  • 打赏
  • 举报
回复
ThreadSerFuc 静态成员函数
2,tab对齐代码
fandh 2009-04-01
  • 打赏
  • 举报
回复
是哪行出错?
龙凤呈祥焱 2009-04-01
  • 打赏
  • 举报
回复
线程函数,如果是类成员,声明时应该写为:
static unsigned int __stdcall Class::threadFun( void * pArg );
定义时应该写为
unsigned int __stdcall Class::threadFun( void *pArg )
{
}

__stdcall的调用约定不能少。
Jacky_Dai 2009-04-01
  • 打赏
  • 举报
回复
怎么开了两个帖子呢?

15,471

社区成员

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

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