Bonjour,

Je veux créer un thread pour exécuter la fonction suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :

Code X : Sélectionner tout - Visualiser dans une fenêtre à part
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.