Я новичок в C++
и пытаюсь создать несколько потоков с помощью pthread
.pthread C++ неверный разговор из void * (*) в void * (*) (void *)
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);
Как я могу это исправить?
Если у вас есть C++ 11, почему бы не использовать 'std :: thread'? На самом деле он использует систему типов, а не везде. – NathanOliver
Единственный тип функции, которую вы можете отправить в 'pthread_create', - это те, у которых есть прототип' void * create_server (void *) '. Вам нужно изменить функцию 'create_server' или лучше нас' std :: thread', как упоминалось NathanOliver. – Holt
@NathanOliver Напоминает мне о старой шутке «программисту С, сильная печать, когда он сердится на свою клавиатуру». :) – erip