C++ (Linux) でマルチスレッド サーバーを実装しています。私の主な目的は、スレッドを使用して関数を呼び出し、クライアントの詳細を他の関数に送信することです。ここに私のコードスニペットがあります:
while(true)
{
if((acceptId = accept(sockId,(struct sockaddr*)&clientAddr,(socklen_t *)&address)) == -1)
perror("Accept:");
inet_ntop(clientAddr.ss_family,get_ip_address((struct sockaddr *)&clientAddr),ip1, sizeof(ip1));
clientInfo *cInfo = new clientInfo;
cInfo->acceptId = acceptId;
strcpy(cInfo->ip, ip1);
void *info = cInfo;
pthread_t thread_request;
pthread_create(&thread_request,NULL,&Parse::parseRequest_helper,info); // after this while loop is terminating
//p.parseRequest(info);
sleep(0);
cout<<"\nserver: got connection from "<<ip1<<" Port:"<<clientport; // this is not reachable
}
// これは、これを使用する parseRequest() 関数のヘルパー関数です。parseRequest 関数を呼び出しています。
static void * Parse::parseRequest_helper(void *c)
{
cout<<"Inside Helper"; // Not coming here
return ((Parse *)c)->parseRequest(c);
}
void * Parse::parseRequest(void *info)
{
cout<<"Inside Parse Request"; //Not coming here
clientInfo *cInfo = (struct clientInfo *)info;
cout<<cInfo->ip;
}
スレッドを使用しておらず、while ループ内で直接 parseRequest を呼び出している場合、すべて問題ありませんが、スレッドを使用してこの関数を呼び出すと、ブロックされます。提案 ??