Bonjours, je dois faire une recherche grâce à des threads. mais je voudrais savoir comment arrêter tout les threads quand j'ai la réponse.
Mes threads sont stoqués dans un tableau (pthread_t *mythread;)
Merci d'avance
Olivier
Version imprimable
Bonjours, je dois faire une recherche grâce à des threads. mais je voudrais savoir comment arrêter tout les threads quand j'ai la réponse.
Mes threads sont stoqués dans un tableau (pthread_t *mythread;)
Merci d'avance
Olivier
Il n'y a pas une fonction pthread cancel ? Sinon, pour avoir une vue de l'ensemble des fonctions disponibles dans la librairie pthread, tu dois pouvoir faire un man pthread.h, peut être que tu y trouveras de l'inspiration.
Lire la doc :Citation:
Envoyé par OlivierDotre
http://www.llnl.gov/computing/tutorials/pthreads/
Sympa ce lien, bookmarké, merci :mrgreen:Citation:
Envoyé par Emmanuel Delahaye
Merci, c'est parfait ça marche :d:d
+1 en plus c'est pas la premiere fois que je vois des liens sympatoches d'Emmanuel. Faudrait un jour qu'il organise une vente aux encheres :mrgreen:Citation:
Envoyé par Franck.H
Salut c'est encore moi
j'ai donc fait ma fonction mais une fois sur deux elle renvois un code d'erreur
Donc je ne sais pas comment faire, mais j'ai l'impression que ma méthode à certaine lacune car des threads ne s'arretent aps de suite.Code:
1
2
3
4
5
6
7
8
9
10
11
12 void kill_threads(int n){ int i; print_terminal("Main","Killing the threads..."); for(i=1;i<MAX_THREADS+1;i++) { //pthread_cancel(mythread[i]); if(i!=n){ if(pthread_cancel(mythread[i])) error_exit("error while killing thread."); } } print_terminal("Main","Threads killed..."); }
Merci
slt,
lorsque tu travaille avec des tableaux ou des pointeurs sur un ensemble de donnée, n'oublie pas que le premier élément se trouve à l'indice 0 et non à 1.
tu dois donc initialiser ta variable i à 0 et tourner jusqu'à MAX_THREAD.
Si tes threads ne s'arrêtent pas tt de suite, c'est parce que tu n'as pas utilisé les bonnes options. Il faut que tu indiques dans chacun de tes threads que tu acceptes de te faire tuer, tu dois également indiquer de quelle façon (directement ou de façon diffèrée).
va voir les pages de manuel de pthread_cancel pour plus de détails.
voila j'espère que cela te donne déjà quelques pistes.
++
Ok, j'avais oublier pour les tableaux... La bête erreur :-d
Je vais de suite aller relire les man page, je savais pas qu'il fallait leurs dire ça.
merci
Voila j'ai réparé ma fonction
J'ai bien changé la manière dont s'arrête mes threadsCode:
1
2
3
4
5
6
7
8
9
10
11 void kill_threads(int n){ int i; print_terminal("Main","Killing the threads..."); for(i=0;i<MAX_THREADS;i++) { if(i!=n){ if(pthread_cancel(mythread[i])) error_exit("error while killing thread."); } } print_terminal("Main","Threads killed..."); }
Mais rien n'y fait, ça plante toujours là.Code:pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, PTHREAD_CANCEL_DEFERRED);
Si quelqu'un pouvait m'aider ça serait super.
Merci
Olivier
Je trouve rien comme info là dessus mais ça ne peut pas poser un problème si jamais le thread est déjà fini si je fais un cancel..