Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1092 connectés 

  FORUM HardWare.fr
  Programmation
  C

  problème passage paramètre pthread_create ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème passage paramètre pthread_create ?

n°824005
manson69
Posté le 16-08-2004 à 10:43:02  profilanswer
 

Je dois utilisé pthread_create :
 
int pthread_create(pthread_t * thread, pthread_attr_t * attr, fonction, arguments);  
 
 
j'ai une fonction qui prend 4 arguments et je dois passé cette fonction dans pthread_create mais je sais pas comment faire pour passé la fonction et les 4 arguments.
 
 

Code :
  1. void fonction(int i, char c[], int d, int f)
  2. {
  3.    .......
  4. }
  5. for(t=0;t < nb_thread;t++)
  6. {
  7.    printf("Creating thread No %d\n", t);
  8.    rc = pthread_create(&thread[t], &attr, fonction, ????); 
  9.    if (rc)
  10.    {
  11.       printf("ERROR; return code from pthread_create() is %d\n", rc);
  12.       exit(-1);
  13.    }
  14. ...


 
 
Merci.


Message édité par manson69 le 16-08-2004 à 10:43:40
mood
Publicité
Posté le 16-08-2004 à 10:43:02  profilanswer
 

n°824014
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 16-08-2004 à 10:55:16  profilanswer
 

moi je ferais comme ça :  
 
- création d'une structure contenant tes arguments :

Code :
  1. typedef struct {
  2.    int i;
  3.    char c[];
  4.    int d;
  5.    int f;
  6. } args;


 
ensuite une petite fonction wrapper qui va bien (pour encapsuler ta fonction thread et la structure) :

Code :
  1. int wrapper (args *arglist)
  2. {
  3.    fonction(arglist->i, arglist->c, arglist->d, arglist->f);
  4.    free(arglist);
  5. }


 
- et enfin, le main :

Code :
  1. int main (int argc, char **argv)
  2. {
  3.    args *arglist = malloc(sizeof(args));
  4.    // remplir la structure arglist
  5.    arglist->i = xxx;
  6.    arglist->c = xxx;
  7.    [...]
  8.    rc = pthread_create(&thread[t], &attr, wrapper, arglist);
  9.    [...]
  10. }


vala [:god]


Message édité par Harkonnen le 16-08-2004 à 10:57:23
n°824041
Taz
bisounours-codeur
Posté le 16-08-2004 à 11:24:20  profilanswer
 

bof, c'est incorrect au niveau des types. 2 secondes je recherche mon exemple

n°824042
Taz
bisounours-codeur
Posté le 16-08-2004 à 11:26:28  profilanswer
 

http://forum.hardware.fr/forum2.ph [...] 877&cat=10


Message édité par Taz le 16-08-2004 à 11:26:58
n°825920
manson69
Posté le 18-08-2004 à 16:05:20  profilanswer
 


Merci.
 
J'aurais encore voulu savoir un truc.
voila j'ai ma fonction qui prend une structure.
J'aimerais retourné une chaine de caractère.
 

Code :
  1. void* fonction(void *p)
  2. {
  3.     struct MyArgs *args = p;
  4.     /* code de la fonction */
  5.     char chaine[20];
  6.     pthread_exit((void *) 0);
  7. }


 
Est ce que la valeur de retour je peut la mettre dans : pthread_exit(chaine);
 
voila ce que je fais après pour la fin des threads :
 
 

Code :
  1. for(t=0;t < nb_thread;t++)
  2. {
  3.    rc = pthread_join(thread[t], (void **)&status);
  4.    if (rc)
  5.    {
  6.       printf("ERREUR : phtread_join() return code = %d\n", rc);
  7.       exit(-1);
  8.    }
  9.    printf("Thread %d status= %d\n",t, status);
  10. }


 
La valeur de retour, elle correspondrait à status ? Comment la récupérer ?
Je n'arrive pas à retourné la chaine.
 
Merci.

n°826547
manson69
Posté le 19-08-2004 à 10:37:24  profilanswer
 

up ...

n°826550
blackgodde​ss
vive le troll !
Posté le 19-08-2004 à 10:42:25  profilanswer
 

on retourne JAMAIS de tableau.
 
essaye p-e avec une allocation dynamique ... (je connais mal les pthread)


---------------
-( BlackGoddess )-
n°826567
Taz
bisounours-codeur
Posté le 19-08-2004 à 10:56:41  profilanswer
 

BlackGoddess a écrit :

on retourne JAMAIS de tableau.

faux. on ne retourne jamais une référence à une variable locale.

BlackGoddess a écrit :


essaye p-e avec une allocation dynamique ... (je connais mal les pthread)

y a aucun problème

n°826570
blackgodde​ss
vive le troll !
Posté le 19-08-2004 à 10:57:41  profilanswer
 

bin un tableau est forcément local non ?


---------------
-( BlackGoddess )-
n°826580
Taz
bisounours-codeur
Posté le 19-08-2004 à 11:01:02  profilanswer
 

non ce que je veux dire c'est qu'on pourrait te passer quelque chose (pointeur, référence, etc) en argument, à ce moment là tu peux le retourner au contexte appelant sans problème

mood
Publicité
Posté le 19-08-2004 à 11:01:02  profilanswer
 

n°826583
blackgodde​ss
vive le troll !
Posté le 19-08-2004 à 11:03:07  profilanswer
 

ok je vois ce que tu veux dire


---------------
-( BlackGoddess )-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  problème passage paramètre pthread_create ?

 

Sujets relatifs
Problème avec addslashesProbléme Datatype image avec SQL server 2000
[BCB6] problème de conversion de couleur hexaProblème de session
Problème d'Envoi de Résultats d'un Formulaire( AIDE ) Problème de variables
problème utf8 (urgent)probleme tableau
Problème lié à la création de MDE sur une application ACCESS[html]Probleme facile => affichage de pages sans tout rafraichir
Plus de sujets relatifs à : problème passage paramètre pthread_create ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR