2012-04-19 5 views
2

私のアプリケーションは、自分のスレッド上で複数の長時間実行する関数/メソッドを起動します。これらのスレッドの1つでエラーが発生すると、プログラムがクラッシュします(期待どおり)。私の質問は、しかし、アプリケーションによって生成されたすべてのスレッドが実行を停止するのですか?彼らはどこかにぶら下がっていますか?もしそうなら、それらを監視するために私はそれらを殺すことができる別のアプリケーションを書く必要がありますか?私のマルチスレッドアプリケーションが失敗した後、未完了のスレッドがハングアップしますか?

ありがとうございました!

+7

ヒント:プロセスとは何か、スレッドとどのように違うのですか? –

+0

この写真は彼らが言うよりも少し複雑です。あなたはプロセスをクラッシュしません。未処理の例外がアプリドメインをクラッシュさせます。管理されたすべてのスレッドは、そのアプリドメイン内で強制終了されます。通常は、そのアプリケーションドメインをホストするプロセスも殺されることになります。しかし、asp.netサーバのようなどこかでホストすれば、それは生き残るかもしれません...学問の知識が必要な時にジョンスケットはどこですか? :)私はこのケースではネイティブのスレッドに何が起こるかと言うことができません...とperhapse他の不明な状況があるかもしれない.... –

答えて

12

プロセスが終了すると、そのプロセスに含まれるすべてのスレッドが終了します。スレッドはプロセス外に存在することはできません。アプリケーションクラッシュ=プロセスの終了。

1

すべてのスレッドを作成したプロセスが強制終了/中止された場合、スレッドはOSによって自動的に中止されます。つまり、実行中のプロセス=少なくとも1つの実行中のスレッド、終了したプロセス=すべてのスレッドが終了したことです。

1

スレッドからプロセスを起動する場合、起動するプロセスは、起動プロセスが終了した後も引き続き実行されます。タスクマネージャーとコード内のプロセスツリーを強制終了できますが、デフォルトでは、アプリケーションが異常終了した場合でも、生成されたプロセスは継続して実行されます。

私はこれはあなたが

私のアプリケーションは、独自のスレッドで

複数長時間実行プロセスを開始したとき、あなたは何を意味するかされると仮定しています。しかし、多分私はあなたが意味しているものを誤解しています言うこと

関連する問題