一,C++
//.h文件/////////////
HANDLE thread_Socket[50]; //线程个数
DWORD WINAPI ServerPreDeal(LPVOID lpParameter);
struct MassageToStruct
{
CdwcjtestDlg *cStcmylog;
int ConnectID;
MassageToStruct()
{
cStcmylog = NULL;
ConnectID=0;
}
}readcom[64];
-------------------------------------------------------------------
/////.CPP文件///////
//启动
unsigned long id;
int ConnectID;
ConnectID= 0;
memset(readcom,0,sizeof(MassageToStruct));
for(int i = 0 ; i <g_ThreadNum; i ++ )
{
ConnectID = i;
//if(thread_Socket[ConnectID] == NULL)
{
readcom[ConnectID].ConnectID = ConnectID+1;
readcom[ConnectID].cStcmylog = this;
thread_Socket[ConnectID]=CreateThread(NULL, 0, ServerPreDeal,(LPVOID)&readcom[ConnectID], 0, &id);
if (thread_Socket[ConnectID] == NULL)
{
memset(cReadBuff,0,sizeof(cReadBuff));
sprintf(cReadBuff,"线程%d启动失败!",ConnectID);
log(cReadBuff,1,ConnectID);
return;
}
}
}
DWORD WINAPI ServerPreDeal(LPVOID lpParameter)
{
MassageToStruct stmassage;
memset(&stmassage,0,sizeof(MassageToStruct));
stmassage.cStcmylog = ((MassageToStruct*)lpParameter)->cStcmylog;
stmassage.ConnectID =((MassageToStruct*)lpParameter)->ConnectID;
char prbuff[256];
memset(prbuff,0,sizeof(prbuff));
sprintf(prbuff,"%s%d%s","接受线程",stmassage.ConnectID,"启动");
stmassage.cStcmylog->log(prbuff,1,stmassage.ConnectID+1);
while(1)
{
memset(prbuff,0,sizeof(prbuff));
sprintf(prbuff,"%s%d%s","线程",stmassage.ConnectID,"执行");
stmassage.cStcmylog->log(prbuff,1,stmassage.ConnectID+1);
Sleep(3000);
}//end wile
free(lpParameter);
}
//关闭线程///
DWORD ExitCode;
for(int ConnectID=0;ConnectID < g_ThreadNum;ConnectID++)
{
GetExitCodeThread(thread_Socket[ConnectID],&ExitCode);
TerminateThread(thread_Socket[ConnectID],ExitCode);
thread_Socket[ConnectID]=NULL;
}
本文介绍了一个基于C++的多线程网络应用程序实例,该程序通过创建多个线程来处理客户端连接请求,每个线程负责一个客户端的通信工作。文章展示了.h和.cpp文件中的关键代码段,包括线程的启动、运行及关闭过程。
921

被折叠的 条评论
为什么被折叠?



