请问高手,我这里用CreateThread想传入多个参数给次级线程该怎么传,如果用结构体指针封一下那不就会出现多线程之间的同步问题了么,所以只能以值传进去,那怎么弄呢
比如我想传一个SOCKET类型的值,和一个char类型的值给次级线程
hThread = CreateThread(NULL, 0, ClientThread,
(LPVOID)????, 0, &dwThreadId);
DWORD WINAPI ClientThread(LPVOID lpParam)
该怎样修改这段函数???
比如我想传一个SOCKET类型的值,和一个char类型的值给次级线程
hThread = CreateThread(NULL, 0, ClientThread,
(LPVOID)????, 0, &dwThreadId);
DWORD WINAPI ClientThread(LPVOID lpParam)
该怎样修改这段函数???
struct yourParam{
//....
};yourParam * pParam = new yourParam;
// prepare the parameter
hThread = CreateThread(NULL, 0, ClientThread,
(LPVOID)yourParam, 0, &dwThreadId);// 在线程中再取出还原
yourParam * pClientParam = (yourParam*)plParam;// 注意使用完要删除
typedef struct {
SOCKET ConnectedSock;
char flag[1];
} Pstruct;DWORD WINAPI ClientThread(LPVOID lpParam)
{
Pstruct *InPstruct = (Pstruct * ) lpParam;
// printf("%d", InPstruct->ConnectedSock);
// SOCKET sock=InPstruct->ConnectedSock;
SOCKET mmsock = (SOCKET)lpParam;
下面一段是线程外的函数
Pstruct *PtrStruct;
PtrStruct = &tmpStruct;
//在这里打出来的PtrStruct->ConnectedSock是292
hThread = CreateThread(NULL, 0, ClientThread,
(LPVOID)PtrStruct, 0, &dwThreadId);帮忙看一下,我现在是不知道问题在哪里了
下面是一个服务端的事例代码,有些地方不完整int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0; AfxBeginThread(MTServerThread,0);
while(_getch()!=27); // 'ESC' to cancel closesocket(server);
WSACleanup(); return nRetCode;
}UINT MTServerThread(LPVOID pParam)
{
if(listen(server,10)!=0)
{
return 0;
} SOCKET client;
sockaddr_in from;
int fromlen=sizeof(from); while(true)
{
client=accept(server,(struct sockaddr*)&from,&fromlen);
AfxBeginThread(ClientThread,(LPVOID)client);
} return 0;
}UINT ClientThread(LPVOID pParam)
{
SOCKET client=(SOCKET)pParam; strcpy(buff,"#Server Ready.\r\n");
send(client,buff,strlen(buff),0); closesocket(client);
return 0;
}