[c/posix] Thread Encore Active ? - pthread_alive ?

C’est encore moi et les threads, avec un autre problème :

j’ai une thread pour gérer un serveur (avec bind, listen, accept) et bien entendu je test les valeurs de retour de listen/thread …

Ce que je désirerai c’est quand je plante là dedans (return 0x1), je puisse déterminer si la thread est active.

Le man n’est pas très clair à ce sujet, et j’ai pas trouvé dedans :o

dois je me farcir des variables globales?

Justement avec pthread_join, pseudo code

debut function()
si erreur pthread_exit(NULL)
fin function()

debut main()
pthread_create(function)
pthread_join(thread)
printf("Thread arreté ici");
fin main

Vi, mais ça bloque la thread en cours. En gros, si je fais du gtk, je cherche à attendre ma thread (qui est une boucle infinie, c’est le but) hé bien je suis bloqué :o

Je ne vois pas pkoi ca bloquerais en gtk, j’ai déja utilisé les threads sans soucis.
D’ailleur je ne vois pas ce que tu cherches à faire : si dans la thread, une erreur de listen/read arrive, tu peux modifier une variable global (oublie pas les mutex lock/unlock) qui vaudra 1 ou 0.
Tu peux voire aussi, sans variable globale, avec pthread_self, si ca te renvoye 0, c’est que tu n’as plus de thread actif.

atta :

http://www.rt.com/man/pthread_join.3.html

Si tu veux, c’est mon serveur : y a un thread qui attend les connexions et prépare les clients , et l’autre qui envoie des données

Si le thread qui accept() quitte, ben je veux justement que ça fasse planter.

Et là, mes variables globales sont justement non protégées : je les définis d’abord à TRUE avant d’appeler la thread, et si la thread modifie la valeur je quitte la thread courrante.

[edit] ce que j’aimerai bien c’est l’équivalent d’un signal : je demande à être averti si la thread n’existe plus, pour justement effacer mes données (avec mutex), et quitter la thread parente.

Ah aussi, un truc que je pige pas :

pthread_mutex_t mutex = …;

L’interblocage est-il normal dans la même thread?

Oki, tu peux protéger tes variables globales via pthread_mutex_lock et pthread_mutex_unlock, je pense que c’est pas trop crade comme méthode :slight_smile:

Heu?

Je veux justement éviter de les protéger :slight_smile: l’idée c’est de regarder si la thread a modifié la variable d’erreur. Si je pose un verrou dessus, vais me farcir un joli interblocage :slight_smile:

Voila ce que j’ai compris : tu as un serveur avec une thread qui fait les accept des client et une autre thread qui s’occupe d’écrire sur la socket, ce qui donnerais en pseudo code :

debut write_socket
write(socket, data)
fin write_socket

debut accept_function

debut boucle infini
accept(socket, client)
prepare(client)
fin boucle infi

// thread fini ici
thread_init = FALSE

fin accept_function

debut creation_gui()
si thread_init == FALSE
messagebox("le thread est fini")
fin si
fin creation_gui()

debut main

thread_init = TRUE
pthread_create(accept_function)
pthread_create(write_socket)
creation_gui()

fin main

Dit moi si c’est ca paske je comprend vite mais faut m’expliquer longtemps :ane:

j ai pas suivi toute l’histoire, mais pourquoi tu n’utilise pas les signaux justement, tu envoie un signal au process que tu veux, juste avant de faire un exit

Kiss> à peu près
Igor> fonctionne pas avec la lib pthread pour windows…

Je pense qu’il y a moyen de faire quelque chose avec ca :

"pthread_kill send signal number signo to the thread thread. Pthreads-w32 only supports signal number 0, which does not send any signal but causes pthread_kill to return an error if thread is not valid."

Je vienx de voir en effet, va falloir que je change ça.