我正在尝试在我的 Unity 项目中使用线程,该项目正在部署在 Android 手机上以与 Google Daydream VR 系统一起使用。我遇到了一个问题,即线程没有像我预期的那样死亡。
我正在创建一个如下所示的线程,并为其分配一个“活着”时运行的函数。当发生特定操作时(在我的情况下,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() 中的任务中途停止并且不再进入。Update() 函数继续循环,但 thread.IsAlive 继续声明线程处于活动状态,当我理解它已停止操作时。如果我退出该脚本正在其中运行的场景,则线程将终止并且脚本会按预期继续,但是当我留在场景中时它不会终止。我不知道为什么。
几乎与此相同的代码已经在 Windows 机器上进行了测试,在 Unity 中运行,它完全符合我的预期,这让我相信这可能是一个 Android/Daydream 问题。
在诊断发生的事情方面的任何帮助都会很棒。由于重现问题所需的代码、场景和平台的规模,很难发布 MWE(抱歉)。
更新:更改了我的 Windows 代码以更接近地复制 Android 版本。现在可以确认这是 Android/Daydream 问题,而不是“场景切换”问题。Windows 版本按预期正确杀死了线程。