web-dev-qa-db-ja.com

スレッド終了コードとは何ですか?

デバッグ中の出力ウィンドウのスレッド終了コードとは正確には何ですか?それは私にどのような情報を提供しますか?それはどういうわけか便利なのでしょうか、それとも私を悩ませるべきではない内部的なものですか?

The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).

おそらく、終了コードとその重要性のある種のリストがありますか?

111
Ondrej Janacek

実際、このテーマについてはあまり説明されていないようですが、終了コードはスレッドの終了方法を示すために使用されることになっています。0は、他の何かが意味する傾向がある一方で、安全に終了したことを意味する傾向があります期待どおりに終了しませんでした。しかし、この終了コードは、これを完全に見落とすように自分でコードに設定できます。

詳細に役立つと思われる最も近いリンクは this です

上記のリンクから引用:

終了する方法が何であれ、プロセスまたはスレッドから返す整数は0〜255(8ビット)の値でなければなりません。ゼロの値は成功を示し、ゼロ以外の値は失敗を示します。整数値を終了コードとして返すことはできますが、プロセスまたはスレッドから終了コードの一部として整数の最下位バイトのみが返されます。上位バイトは、プロセスに関する特別な情報を伝えるためにオペレーティングシステムによって使用されます。終了コードは、成功/失敗に応じて他のプログラムを条件付きで実行するバッチ/シェルプログラムで非常に役立ちます。


GetEXitCodeThread のドキュメントから

重要GetExitCodeThread関数は、スレッドが終了した後にのみ、アプリケーションによって定義された有効なエラーコードを返します。したがって、アプリケーションはエラーコードとしてSTILL_ACTIVE(259)を使用しないでください。 スレッドがエラーコードとしてSTILL_ACTIVE(259)を返す場合、この値をテストするアプリケーションは、スレッドがまだ実行中であり継続していることを意味すると解釈できますスレッドの終了後にスレッドの完了をテストします。これにより、アプリケーションが無限ループに陥る可能性があります。


これについての私の理解は、独自のアプリケーションforで独自のアプリケーション内でスレッドを使用している場合、終了コードはそれほど重要ではないということです。例外は、相互に依存関係のあるいくつかのスレッドを同時に実行している場合です。外部ソースがこのエラーコードを読み取る必要がある場合は、他のアプリケーションにスレッドのステータスを知らせるように設定できます。

98
Sayse

Sayseが述べたように、終了コード259 (0x103)には特別な意味があります。この場合、デバッグ中のプロセスはまだ実行中です。

これは、Webサービスのデバッグで頻繁に見られました。スレッドは、各Webサービス呼び出しを実行した後も引き続き実行されるためです(まだ呼び出しを待機しているため)。

54

私に起こったことは、ソリューションに複数のプロジェクトがあることです。プロジェクト1をデバッグするつもりでしたが、プロジェクト2はデフォルトの開始プロジェクトとして設定されていました。これを修正するには、プロジェクトを右クリックして[スタートアッププロジェクトとして設定]を選択し、デバッグの実行は問題ありません。

0
Feng Zhang