Bonjour,
Je veux créer un thread pour exécuter la fonction suivante :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| void traiterClient(int da)
{
char buffer[SIZE], inst[SIZE], nomFich[SIZE], nomFichier[SIZE];
.......
printf("Connexion socket n°%d établie\n",da);
if (read(da,nomFich,SIZE) < 0) /*On récupere le nom du fichier*/
{ /*Avec toujours un petit test pour éviter les erreurs*/
perror("Nom de fichier non recu : ");
exit(-4);
}
......
close(da); /*On ferme la socket...*/
close(fich); /*...et le fichier*/
} |
Pour créer le thread je dois utiliser la fonction suivante de la bibliothèque p_thread :
int pthread_create (pthread_t * thread, pthread_attr_t * attr, void * (* start_routine) (void *), void * arg)
Comme c'est indiqué, l'argument de la fonction qu'on doit éxecuter doit être de type void* , or l'argument de ma fonction est de type int.
j'ai donc fait un petit changement dans le code de la fontion :
1 2 3 4 5 6 7 8
| void traiterClient(void *da1)
{
char buffer[SIZE], inst[SIZE], nomFich[SIZE], nomFichier[SIZE];
char nomcom[5];
int da = (int) da1;
....} |
Dans le main, j'ai fait l'appel au thread de la façon suivante:
1 2 3 4 5 6 7 8
| int main(int argc, char* argv[]){
int da;
pthread_t th;
...
da = accept(ds, (struct sockaddr *) &name, &ta);
pthread_create (&th, NULL, traiterClient, (void*)da);
...
} |
lors de la compilation, j'ai l'erreur suivante :
1 2
| serveur.c:76: error: invalid conversion from ‘void (*)(int)’ to ‘void* (*)(void*)’
serveur.c:76: error: initializing argument 3 of ‘int pthread_create(pthread_t*, const pthread_attr_t*, void* (*)(void*), void*)’ |
la ligne 76 est la ligne correspnd à l'appel à la fonction traiter client : pthread_create (&th, NULL, traiterClient, (void*)da).
J'ai effectué plusieurs conversion de type mais j'ai pas réussi à rendre les types compatibles sachant que la fonction appelé par le thread doit avoir un argument de type void* .
ESt ce que quelcun peut m'aider pour rendre les types compatibles et pouvoir executer la fonction traoter client par avec un thread??
Merci d'avance.
Partager