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;
}
//************************************************************** 展开
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;
}
//************************************************************** 展开
3个回答
展开全部
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函数声明的有问题,这是系统函数的名称,建议换一个名称。
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函数声明的有问题,这是系统函数的名称,建议换一个名称。
展开全部
CWinThread *Thread1=AfxBeginThread(线程,NULL,优先级);自己根据实际情况查下AfxBeginThread函数,基本上能解决启动问题!你试下吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上的解法是可以的,不过要注意线程函数需要传递一个this指针过去
或者你的函数是静态的。
或者你的函数是静态的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询