-
C++ Threads Kill
Bonjour,
Je me demandais s'il était possible de tuer un Glibmm::Thread ?
Bon logiquement, s'il est joinable, on fait un join et on l'attend, si on veut l'arrêter on utiliser une variable externe au thread, ou bien des signaux...
Mais s'il mouline dans le vide, j'aimerai le nettoyer... La solution serait de répérer son pid et de le tuer sauvagement ? Mais peut-on au moins récupérer proprement son pid ?
Merci :)
-
Il semblerait que non. Du moins je n'ai rien trouvé de probant dans la documentation officielle.
Maintenant s'il pédale dans la semoule comment le sais-tu? Si tu peux le savoir de l'extérieur du thread alors il doit être possible de le savoir de l'intérieur, non?
Maintenant il est précisé, toujours dans la documentation officielle, qu'il faut utiliser Glib::Thread::Exit(); pour arrêter un thread. tu peux toujours essayer de l'extérieur.
-
Ben disons que je veux juste mettre une protection, basée sur un timeout par exemple... s'il est trop long et qu'il ne répond pas, pof, je le kill :)
Oui j'ai lu le Glib::Thread::Exit(), mais si j'ai bien compris (j'ai dit si ;)) c'est dans les méthodes du Thread qu'il s'utilise, pas de l'extérieur... sinon si j'ai plusieurs threads, comment savoir lequel je kill :?
En truc tordu je me disais qu'il pourrait m'envoyer par signal son pid, mais c'est moche :roll: Dans ce cas-là, je vais me rabattre sur des fork :cry:
-
Mais quand tu crées un thread tu récupères bien son pointeur, non?
-
Oui, mais si je me rappelle bien, tu ne peux faire qu'un yield ou un join dessus, et il me semble que la doc dit qu'il est déconseillé de détruire l'objet récupéré....
Mais maintenant que tu me fait répondre ce que je réponds, je me demande s'ils ne disent pas ça dans les cas d'arrêt propres, en précisant qu'il vaut mieux attendre avec join, ou le laisser se terminer tout seul.... Je pourrais essayer
-
Oui il me semble que la doc. dit ca pour éviter des fuites mémoires. Si tu prends en compte cette donnée tu peux peut-être construire ton thread de manière à ce qui se termine à n'importe quel moment sans provoquer de fuite.
-
Oui je vais envisager cette option...
A ce propos je me demande, si je fork, et que le père fait un kill sur le pid du fils, est-ce que les conditions d'arrêts du processus (concernant fuites mémoires, etc) sont les même que si je détruis le thread ?