我試圖在其中部署在Android手機上與谷歌的白日夢VR系統中使用我的統一項目中使用線程。我有一個問題,線程沒有像我期望的那樣死去。谷歌白日夢主題使用Unity
我創建了一個如下所示的線程,併爲其分配了一個函數,以便在「活着」時運行。當一個特定的動作發生時(在我的情況下,一個UDP網絡關閉),線程應該停止執行並且死掉。但是,該線程停止執行其功能,但不會死亡。
Thread thread;
private void Update()
{
if (!thread.IsAlive)
{
// Create a new thread.
}
}
public void createNewThread()
{
thread = new Thread(Run);
thread.Priority = System.Threading.ThreadPriority.BelowNormal;
thread.Start();
}
void Run()
{
// Do thread task.
}
在上面的例子中,創建了線程,並在Run()中運行它的任務。當動作發生時,在Run()內的任務中途停止,並且不會再次進入。更新()函數繼續循環,但thread.IsAlive繼續指出線程是活的,當它是我的理解它已停止運作。如果我退出腳本運行的場景,線程就會死亡,並且腳本按預期繼續運行,但當我停留在場景中時,腳本不會死亡。我不知道爲什麼。
幾乎完全相同的代碼已經在Unity機器上運行的Windows機器上測試過,它的工作原理與我的預期完全相同,這讓我相信這可能是Android/Daydream問題。
診斷髮生了什麼事情將是巨大的任何幫助。由於重新創建問題所需的代碼,場景和平臺的規模(很抱歉),很難發佈MWE。
更新:更改我的Windows代碼以更接近地複製Android版本。現在可以確認這是Android/Daydream問題,而不是「場景切換」問題。 Windows版本按預期正確地殺死了線程。
謝謝。我將更新更改爲公開,但它沒有幫助解決問題。我的代碼已經在尋找什麼時候isAlive!= true的Update函數,它在Windows上工作正常,但在Android/Daydream上無法正確執行。 – ritchie888