C++如何在一个MFC里面构建多个子线程?谢谢
因为现在用MFC做了一个TCP/IP通信传输和图像处理两个任务,通信这块需要采用子线程,不然会导致界面卡。其中TCP/IP通信传输方面,我自己定义了连接,关闭,发送数据三...
因为现在用MFC做了一个TCP/IP通信传输和图像处理两个任务,通信这块需要采用子线程,不然会导致界面卡。其中TCP/IP通信传输方面,我自己定义了连接,关闭,发送数据三个线程。如图。但是会发生错误,请问该怎么解决呢?请问你们在建立TCP/IP通信传输的时候,是怎么去构建线程的呢?谢谢下面是我的部分代码:void CGxSingleCamMonoDlg::OnBnClickedSend(){ // TODO: 在此添加控件通知处理程序代码 AfxBeginThread(Send,NULL); }CString CGxSingleCamMonoDlg::GetConnectIp(SOCKET s){ sockaddr_in sockAddr; memset(&sockAddr, 0, sizeof(sockAddr)); int nSockAddrLen = sizeof(sockAddr); ::getpeername(s, (SOCKADDR*)&sockAddr, &nSockAddrLen); // 转化为主机字节顺序 int nPeerPort = ::ntohs(sockAddr.sin_port); // 转化为字符串IP CString sPeerIP = ::inet_ntoa(sockAddr.sin_addr); return sPeerIP;}void CGxSingleCamMonoDlg::onac(){ CString str="【新连接】["; if(csnum<N) { cslisten.Accept(csrev[csnum]); str+=GetConnectIp(csrev[csnum]); csrev[csnum].step(this,csnum); csnum++; } else MessageBox("客户端连接太多!");}void CGxSingleCamMonoDlg::oncl(){ for(int i=1;i<=csnum;i++) if(!csrev[i]) { csrev[i].Close(); } }UINT Send(LPVOID pParame){ CString s1,sText1=_T("1"); CString chx; int OX=6; chx.Format("%d",OX); CString chy; int OY=9; chy.Format("%d",OY); s1 = sText1+" "+chx+" "+chy+"\r\n"; if(csrev[0].Send(s1,s1.GetLength())==SOCKET_ERROR) { ::AfxMessageBox(_T("数据发送失败!")); return 0; } else { CString strItem ="【发送信息】["; strItem += "x:"+sText1+" y:"; } return 0;}void CGxSingleCamMonoDlg::OnBnClickedconnect(){ if(startstr==0) { AfxBeginThread(Connect,NULL); startstr=1; } else if(startstr==1) { AfxBeginThread(Close,NULL); startstr=0; }}UINT __cdecl Connect(LPVOID pParam){ int port=8080; if(cslisten.Create(port)) { cslisten.Listen(); cslisten.Listen(); } else { ::AfxMessageBox(_T("绑定监听端口失败,请确认该端口没有被其它程序占用!")); cslisten.Close(); } return 0;}UINT __cdecl Close(LPVOID pParameter){ cslisten.Close(); return 0;}
展开
1个回答
2016-07-04
展开全部
参考...
AxfBeginThread;
_beginthread;
AxfBeginThread;
_beginthread;
更多追问追答
追问
AxfBeginThread;
我用的是这个。
追答
然后一个线程函数 ,
UINT ThreadProc(LPVOID param)
{
CGxSingleCamMonoDlg* pDlg = (CGxSingleCamMonoDlg*)param;
...
return 0;
}
AfxBeginThread(ThreadProc, this);
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询