) C++
에 새롭고 pthread
으로 다중 스레드를 만들려고합니다. pthread void * (*)에서 void * (*)로 무효화 된 대화 (
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);
가 어떻게이 문제를 해결할 수 있습니다 :이 코드를 실행하면
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;
}
, 그것은 메시지가?
을 호출 할 수 있습니다. C++ 11을 사용한다면 왜'std :: thread'를 사용하지 않을까요? 실제로 모든 곳에서 캐스팅하는 대신 형식 시스템을 사용합니다. – NathanOliver
'pthread_create'에 보낼 수있는 유일한 유형의 함수는'void * create_server (void *)'프로토 타입을 가진 것들입니다. NathanOliver가 언급 한 것처럼'create_server' 함수를 변경하거나'std :: thread'를 개선해야합니다. – Holt
@ NathanOliver C 프로그래머에게 오래된 농담을 상기시켜줍니다. 강력한 타이핑은 키보드에 화를 낼 때입니다. " :) – erip