ne peut pas créer le fil correctement

quelqu’un peut-il me dire ce que je fais mal? (J’ai omis le rest du programme parce que c’est très long …)

#include  void *RTPfun(char *client_addr); int main(int argc, char *argv[]) { char* client_addr; pthread_t RTPthread; // ... pthread_create(&RTPthread, NULL, &RTPfun, client_addr) } void *RTPfun(char * client_addr) { // ... return; } 

l’erreur:

  TCPserver.c: Dans la fonction 'main':
 TCPserver.c: 74: 5: avertissement: passage de l'argument 3 de 'pthread_create' à partir d'un type de pointeur incompatible [activé par défaut]
 /usr/include/pthread.h:225:12: remarque: 'void * (*) (void *)' attendu, mais l'argument est du type 'void * (*) (char *)'

Vous devez convertir votre pointeur de caractère en un point vide.

 #include  void *RTPfun(void *client_addr); int main(int argc, char *argv[]) { char* client_addr; pthread_t RTPthread; ... ... pthread_create(&RTPthread, NULL, &RTPfun, (void*)client_addr) } void *RTPfun(void * client_addr) { char *something = (char*)client_addr; .... return; } 

Les pointeurs d’annulation sont utilisés chaque fois que vous devez transmettre des données et vous ne pouvez pas connaître à l’avance le type de variable (char *, integer * …) dont elle sera composée. La fonction que vous donnez à pthread_create prend un vide * en entrée. Vous pouvez ainsi transformer votre pointeur char en un point vide et faire le contraire dans RTPfun.

Pthread fonctionne avec des fonctions qui reçoivent void * et renvoient void *.

Vous devez modifier le paramètre de votre fonction de char * à void *. Voici une alternative:

 #include  void *RTPfun(void *client_addr); int main(int argc, char *argv[]) { char* client_addr; pthread_t RTPthread; ... ... pthread_create(&RTPthread, NULL, &RTPfun, client_addr) } void *RTPfun(void* data) { char *client_addr = (char*)data; .... return; }