MFC中线程的定义并启用,定义线程的代码如下,请问如何启用这两个线程?

//**************************************************************DWORDWINAPISendMessag... //**************************************************************
DWORD WINAPI SendMessage(LPVOID lp) //发送数据的线程
{
CCommunicateDlg Msg;
USES_CONVERSION;
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr(ip);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);

while(1)
{
//创建套接字
SOCKET sockSend = socket( AF_INET,SOCK_STREAM, 0 );
int check = 1;
//向服务器发出连接请求
check = connect( sockSend, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if(check == 0)
{
if(nFlag == false)
{
nFlag = true;
Msg.MessageBox(L"Connect Successful!");
}
//发送数据
send(sockSend, T2A(Msg.m_strMessage2Send), (Msg.m_strMessage2Send.GetLength())+1, 0 );
closesocket(sockSend);
Sleep(500);
}
Msg.MessageBox(L"Connect failed,try again now...");
}
g_Send.SetEvent();
return 0;
}
//******************************************************************************************
DWORD WINAPI RecevieMessage(LPVOID lp) //接收数据的线程
{
CCommunicateDlg*p = (CCommunicateDlg*)lp;
CCommunicateDlg var;
//创建用于监听的套接字
SOCKET sockReceive = socket(AF_INET, SOCK_STREAM, 0);

SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(5000);

//绑定套接字
bind(sockReceive, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
//将套接字设为监听模式,准备接受客户请求
listen(sockReceive, 5); //5为等待连续队列的最大值

SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);

while(1)
{
//等待客户请求到来
SOCKET sockConn = accept(sockReceive, (SOCKADDR*)&addrClient, &len);//sockConn建立连接的套接字
char recvBuf[100]={0};
recv( sockConn, recvBuf, 100, 0 );
// printf("%s\n", recvBuf);
g_ReceiveDate = recvBuf;
Sleep(1000);
}
g_Receive.SetEvent();
closesocket(sockReceive);
return 0;
}
//**************************************************************
展开
 我来答
clxye
2011-06-16 · 超过28用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:83万
展开全部
CWinThread* m_pWinThread;

m_pWinThread = AfxBeginThread( AFX_THREADPROC(SendMessage), (LPVOID)this );
this是我程序中传递的参数,你可以根据你的情况传入你需要的参数,这是MFC框架下的情况。

如果是Win32的也可以这样用:
HANDLE hThreadSend = CreateThread( NULL, 0, LPTHREAD_START_ROUTINE(SendMessage), (LPVOID)this, 0, NULL );
最终不用时调用CloseHandle(hThreadSend );

顺便提一下,你这个SendMessage函数声明的有问题,这是系统函数的名称,建议换一个名称。
zhiwen688
2011-06-17
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
CWinThread *Thread1=AfxBeginThread(线程,NULL,优先级);自己根据实际情况查下AfxBeginThread函数,基本上能解决启动问题!你试下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fanskydream
2011-06-16 · 超过25用户采纳过TA的回答
知道答主
回答量:127
采纳率:0%
帮助的人:95.2万
展开全部
楼上的解法是可以的,不过要注意线程函数需要传递一个this指针过去
或者你的函数是静态的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式