デバッグ中の出力ウィンドウのスレッド終了コードとは正確には何ですか?それは私にどんな情報を与えますか?それは何とか便利なのですか、それとも私を困らせるべきではない内部的なものですか?
The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).
可能性のある終了コードとその重要性のある種のリストはあるのでしょうか?
デバッグ中の出力ウィンドウのスレッド終了コードとは正確には何ですか?それは私にどんな情報を与えますか?それは何とか便利なのですか、それとも私を困らせるべきではない内部的なものですか?
The thread 0x552c has exited with code 259 (0x103).
The thread 0x4440 has exited with code 0 (0x0).
可能性のある終了コードとその重要性のある種のリストはあるのでしょうか?
回答:
実際に終了コードがスレッドが終了した方法についての指示を与えるために使用されることになっているが、どうやらこのテーマに関する説明の多くをがあるようには思えない、0
何かがそれをのdidn意味する傾向がある一方で、それが安全に終了したことを意味する傾向があります期待どおりに終了しません。しかし、この終了コードを完全に見落とすために、自分でコードで設定できます。
詳細情報に役立つと思われる最も近いリンクはこれです
上記のリンクからの引用:
終了方法が何であれ、プロセスまたはスレッドから返す整数は、0〜255(8ビット)の値でなければなりません。ゼロの値は成功を示し、ゼロ以外の値は失敗を示します。整数値を終了コードとして返すことはできますが、整数または整数の最下位バイトのみがプロセスまたはスレッドから終了コードの一部として返されます。上位バイトは、プロセスに関する特別な情報を伝えるためにオペレーティングシステムによって使用されます。終了コードは、プログラムの成功または失敗に応じて他のプログラムを条件付きで実行するバッチ/シェルプログラムで非常に役立ちます。
GetEXitCodeThreadのドキュメントから
重要GetExitCodeThread関数は、スレッドが終了した後にのみ、アプリケーションによって定義された有効なエラーコードを返します。したがって、アプリケーションではSTILL_ACTIVE(259)をエラーコードとして使用しないでください。スレッドがSTILL_ACTIVE(259)をエラーコードとして返す場合、この値をテストするアプリケーションはそれを解釈して、スレッドがまだ実行中であることを意味し、スレッドが終了した後もスレッドの完了をテストし続ける可能性があります。無限ループへの適用。
このすべての私の理解では、独自のアプリケーション内のスレッドを使用している場合、終了コードは、すべてのことはあまり重要ではないということであるため、独自のアプリケーション。これの例外は、相互に依存関係にある複数のスレッドを同時に実行している場合です。外部のソースがこのエラーコードを読み取る必要がある場合は、他のアプリケーションにスレッドのステータスを通知するように設定できます。
RunAsync().Wait();
static void Main(string[] args) { var t = new Task<object>(() => SomeOp(2)); t.Start(); t.Wait(); }
実は、タスクはスレッドプールスレッドによって実行され、スレッドプールのヒューリスティックに基づいて、タスクが完了した後でもスレッドを終了しない場合があります。スレッドは単に、次のタスクが割り当てられるのを待っているスレッドのプールに戻ります。このため、ここでは終了コードSTILL_ACTIVE(259)が非常に直感的に聞こえます。
Sayseが述べたように、終了コードに259 (0x103)
は特別な意味があります。この場合、デバッグされるプロセスはまだ実行中です。
これは、Webサービスのデバッグでよく見ました。これは、各Webサービスの呼び出しを実行した後もスレッドが引き続き実行されるためです(それ以上の呼び出しを待機しているためです)。
私に起こったことは、私のソリューションに複数のプロジェクトがあることです。プロジェクト1をデバッグするつもりでしたが、プロジェクト2がデフォルトの開始プロジェクトとして設定されました。これを修正するには、プロジェクトを右クリックして[スタートアッププロジェクトとして設定]を選択し、デバッグを実行します。