趣味的なIT・ネットの話題

Unityでワンソースなシステム開発:UnityでManualResetEventとかwhileループとかを使うと固まる

MSDNのTCP非同期サーバーのサンプルコードをUnity上で動かそうと移植していたら、Unity自体が固まって強制終了せざるを得なくなるという現象が発生。

ロジックを追っていくとまずwhileの無限ループがあると固まることが判明。開発環境上でPlayするときはアプリは別スレッドで動かしてくれたらいいのにと思うのですが。何か理由があるんでしょうかね。

でwhileを抜いて実行してみてもやっぱり固まる。今度はManualResetEventでWaitOneしているときに固まることが判明。もちろんSetされたら復活するのですが、その間停止するのはアプリとして問題ですから使わない方がいいですね。今回のコードではManualResetEvent自体が不要そうなので丸ごと消しましたが、どうしても必要な場合はスレッドを作った方が良さそうです。

public static ManualResetEvent allDone = new ManualResetEvent(false);

// Set the event to nonsignaled state.
allDone.Reset();

// Wait until a connection is made before continuing.
allDone.WaitOne();

// Signal the main thread to continue.
allDone.Set();

Facebooktwitterpinterestlinkedinmail
納得したらすぐにシェア!