gpt4 book ai didi

c++ - pthread C++ 从 void * (*) 到 void* (*)(void*) 的无效对话

转载 作者:行者123 更新时间:2023-11-28 05:29:56 27 4
gpt4 key购买 nike

我是 C++ 的新手,正在尝试使用 pthread 创建多个线程。

typedef struct thread_args{
int &sockfd;
struct sockaddr_in &serv_addr;
int size_serv_addr;
socklen_t &clilen;
int &newsockfd;
};

void create_server(int &sockfd, struct sockaddr_in &serv_addr, int size_serv_addr, socklen_t &clilen, int &newsockfd){
}

int main(int argc, char *argv[])
{
int sockfd, newsockfd;
socklen_t clilen;

pthread_t t1;
struct sockaddr_in serv_addr, cli_addr;
struct thread_args *args;
args->clilen = clilen;
args->newsockfd = newsockfd;
args->serv_addr = serv_addr;
args->size_serv_addr = sizeof(serv_addr);
args->sockfd = sockfd;


pthread_create(&t1, NULL, create_server, &args);
printf("hello abc");
return 0;
}

当我运行这段代码时,它有一条消息:

error:/bin/sh -c 'make -j 4 -e -f   error: invalid conversion from 'void* (*)(int&, sockaddr_in&, int, socklen_t&, int&) {aka void* (*)(int&, sockaddr_in&, int, unsigned int&, int&)}' to 'void* (*)(void*)' [-fpermissive]
pthread_create(&t1, NULL, create_server, &args);

我该如何解决这个问题?

最佳答案

线程函数的签名应该是:

void *(*start_routine) (void *)

但您提供:

void create_server(int &sockfd, struct sockaddr_in &serv_addr, int size_serv_addr, socklen_t &clilen, int &newsockfd)

你应该创建一个像这样的函数:

void* myThread(void *arg);

然后 pthread_create 调用中的 args 参数将作为 arg 参数传递给 myThread,您可以使用它调用 create_server

的字段

关于c++ - pthread C++ 从 void * (*) 到 void* (*)(void*) 的无效对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39771441/

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