まず、新しいスレッドを開始を心配する前に、あなたが実際に例外を処理し、再起動のスレッドが正常に実行できるようになることを保証することを確認してください。さもなければ、あなたはクラッシュするスレッドの一定のストリームを取得し、例外パレードを処理している間は不安定なプログラムを取得します。思考のためのちょっとした食べ物。
質問に答えて、スレッドへの参照をnullにすると無限ループになります。最悪の場合、後で 'th'を使用しようとすると、nullなので例外が発生します。スレッドへの参照をヌルにしても、何らかの形で関数の引数として渡したパラメータへの参照をnullにすること以外に、自分自身を再起動する必要があることを認識させることはありません。あなたは絶対に/スレッドを再開中止する機能のいくつかの種類が必要な場合は、のいずれかの操作を実行に見て:
- /ブール値を設定するときに、スレッドがクラッシュしたイベントを高め、whileループから抜け出す、または
- スレッドが何をしているのかを示すenumフラグを設定し、エラー状態に設定されていないことを確認するためにメインスレッドのチェックを頻繁に行います。
これは、コードが私の頭の上から完全に良いことではないですが、あなたの一般的な考え方与える:
delegate void ThreadCrashedEvent();
Event ThreadCrashedEvent threadCrashed;
Thread th;
Main()
{
threadCrashed += OnThreadCrashed();
th = new thread(myfunction);
th.Start();
}
void OnThreadCrashed()
{
th = new thread(myfunction);
th.Start();
}
void myfunction()
{
while(true)
{
try
{
LetsGetDangerous();
}
catch(exception)
{
if(threadCrashed != null)
{
threadCrashed();
return;
}
}
}
なぜあなたは新しいスレッドを作成したいですか? –