デコシノニッキ

ホロレンジャーの戦いの記録

【Unityでハマったところ】ThreadとWhileLoop

久しぶりに書くので,リハビリがてらプチ記事を書きますー

Unityでの非同期処理は色々方法がありますが,中でもThreadはよく使う方法だと思います。
以下は”Threadでループ処理する”…よくある例です。

Thread thread;

Start(){
  thread = new Thread();
  thread = new Thread(new ThreadStart(ThreadMethod));
  thread.Start();
}

void ThreadMethod(){
  while(true){
  Debug.Log("Called Cnt");
  }
}

void OnApplicationQuit(){
  if(thread!=null){
    thread.Abort();
  }
}

ですが,この内容で実行すると1回目は実行されども2回目に再生した時Editorがフリーズすると思います。
そこで1つ手を加え以下のようにします。

Thread thread;
bool isFinished = false;

Start(){
  thread = new Thread();
  thread = new Thread(new ThreadStart(ThreadMethod));
  thread.Start();
}

void ThreadMethod(){
  while(true){
    if(isFinished){
       break;
    }

  Debug.Log("Called Cnt");
  }
}

void OnApplicationQuit(){
  if(thread!=null){
     isFinished = true;
     thread.Abort();
  }
}

フラグを追加し,アプリケーション終了時にループ処理をbreakして抜けています。
おそらくこれでEditorが固まるという問題は回避できると思います。良きUnityライフを!

[デコシノニッキ]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」