gpt4 book ai didi

C++ - pthread 不执行

转载 作者:行者123 更新时间:2023-11-28 07:55:11 24 4
gpt4 key购买 nike

我正在用 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 那么一切都很好但是当我使用线程调用这个函数时它会阻塞。建议??

最佳答案

看看你的代码:

static void * Parse::parseRequest_helper(void *c)    
{
cout<<"Inside Helper"; // Not coming here
return ((Parse *)c)->parseRequest(c);
}

只有当传递给此函数的 void * 参数是指向 Parse 的指针时,这才有意义。

void * Parse::parseRequest(void *info)
{

cout<<"Inside Parse Request"; //Not coming here
clientInfo *cInfo = (struct clientInfo *)info;
cout<<cInfo->ip;
}

只有当传递给此函数的 info 参数是指向 clientInfo 的指针时,这才有意义。

因为是同一个参数,这段代码没有意义。它可以是指向 Parse 的指针或指向 clientInfo 的指针,但不能两者都是。

     cout<<"Inside Helper"; // Not coming here

您关于未到达该行代码的结论是不正确的。你是。您只是不知道,因为没有 endl,所以缓冲区不会被刷新。

关于C++ - pthread 不执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12852679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com