私はC++
で新しく、pthread
で複数のスレッドを作成しようとしています。pthread 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'関数を変更するか、NathanOliverで述べたように' std :: thread'を改善する必要があります。 – Holt
@ NathanOliver Cプログラマーには「キーボードに怒っているときに強い入力がある」という古いジョークを思い出させます。 :) – erip