IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Threads & Processus C++ Discussion :

Passage de param�tre dans le thread.


Sujet :

Threads & Processus C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Inscrit en
    Ao�t 2009
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2009
    Messages : 9
    Par d�faut Passage de param�tre dans le thread.
    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.

  2. #2
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    ta fonction de thread doit retourner un void *, bien relire le message d'erreur concernant le param�tre 3 :
    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    serveur.c:76: error: invalid conversion from �void (*)(int)� to �void* (*)(void*)�
    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
    16
    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*/
       return NULL;
    }
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre habitu�
    Inscrit en
    Ao�t 2009
    Messages
    9
    D�tails du profil
    Informations forums :
    Inscription : Ao�t 2009
    Messages : 9
    Par d�faut
    M�me erreur

  4. #4
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    et l� ?
    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
    16
    17
    void * traiterClient(void *da1)
    {
    int da = (int)da1;
      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*/
       return NULL;
    }
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Passage de plusieurs param�tres dans un thread.
    Par deck_bsd dans le forum Windows
    R�ponses: 17
    Dernier message: 09/10/2010, 09h38
  2. Passage de param�tres dans un thread
    Par innosang dans le forum POSIX
    R�ponses: 1
    Dernier message: 04/01/2007, 15h13
  3. Passage de param�tres dans champ hidden
    Par benassis dans le forum G�n�ral JavaScript
    R�ponses: 8
    Dernier message: 27/05/2005, 01h22
  4. R�ponses: 9
    Dernier message: 13/05/2005, 03h13
  5. Passage de param�tres dans une requ�te imbriqu�e
    Par DrakkoFR dans le forum Langage SQL
    R�ponses: 2
    Dernier message: 07/02/2005, 12h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo