112 votes

Quel est un code de sortie de thread ?

Qu'est-ce exactement qu'un code de sortie de fil dans la fenêtre Output lors du débogage? Quelles informations me donne-t-il? Est-ce utile d'une manière ou d'une autre ou juste quelque chose d'interne qui ne devrait pas me préoccuper?

Le fil 0x552c s'est terminé avec le code 259 (0x103).
Le fil 0x4440 s'est terminé avec le code 0 (0x0).

Y a-t-il peut-être une sorte de liste des codes de sortie possibles avec leur signification?

100voto

Sayse Points 9275

Il ne semble pas y avoir beaucoup d'explications sur ce sujet, apparemment, mais les codes de sortie sont supposés être utilisés pour indiquer comment le processus s'est arrêté, 0 tend à signifier qu'il s'est arrêté en toute sécurité tandis que toute autre valeur tend à signifier qu'il ne s'est pas arrêté comme prévu. Mais ce code de sortie peut être défini dans le code par vous-même pour complètement ignorer cela.

Le lien le plus proche que j'ai trouvé pour obtenir plus d'informations est celui-ci

Citation du lien ci-dessus:

Quelle que soit la méthode de sortie, l'entier que vous retournez de votre processus ou thread doit être des valeurs de 0 à 255 (8 bits). Une valeur nulle indique le succès, tandis qu'une valeur non nulle indique l'échec. Bien que vous puissiez essayer de retourner n'importe quelle valeur entière en tant que code de sortie, seul le byte le plus bas de l'entier est retourné de votre processus ou thread en tant que partie d'un code de sortie. Les octets d'ordre supérieur sont utilisés par le système d'exploitation pour transmettre des informations spéciales sur le processus. Le code de sortie est très utile dans les programmes de lot/shell qui exécutent conditionnellement d'autres programmes en fonction du succès ou de l'échec de l'un d'eux.


À partir de la documentation pour GetEXitCodeThread

Important La fonction GetExitCodeThread renvoie un code d'erreur valide défini par l'application uniquement après la terminaison du thread. Par conséquent, une application ne doit pas utiliser STILL_ACTIVE (259) comme code d'erreur. Si un thread retourne STILL_ACTIVE (259) comme code d'erreur, les applications qui testent cette valeur pourraient l'interpréter comme signifiant que le thread est toujours en cours d'exécution et continuer à tester l'achèvement du thread après la terminaison du thread, ce qui pourrait plonger l'application dans une boucle infinie.


Ma compréhension de tout cela est que le code de sortie n'a pas beaucoup d'importance si vous utilisez des threads dans votre propre application pour votre propre application. L'exception à cela est peut-être si vous exécutez quelques threads en même temps qui dépendent les uns des autres. S'il y a une exigence pour qu'une source extérieure lise ce code d'erreur, vous pouvez le définir pour que d'autres applications connaissent l'état de votre thread.

55voto

Kristian Williams Points 431

Comme l'a mentionné Sayse, le code de sortie 259 (0x103) a une signification spéciale, dans ce cas le processus en cours de débogage est toujours en cours d'exécution.

J'ai beaucoup vu cela lors du débogage de services web, car le thread continue de s'exécuter après chaque appel de service web (car il écoute toujours pour de nouveaux appels).

0voto

Feng Zhang Points 3

Ce qui m'est arrivé, c'est que j'ai plusieurs projets dans ma solution. Je voulais déboguer le projet 1, cependant, le projet 2 était défini comme projet de démarrage par défaut. J'ai corrigé cela en cliquant avec le bouton droit sur le projet et en sélectionnant "Définir comme projet de démarrage", puis le débogage s'est déroulé correctement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X