故障原因排查:
在unity里使用C#提供的多线程时,会遇到以下问题:
- 打包后的项目退才行在退出时卡死,必须在任务管理器里强退才行,同时打包出来的日志会报错:
Setting up 8 worker threads for Enlighten. Curl error 42: Callback aborted
- 在编辑器内会导致一直在 reload script assemblies状态,同时可能会导致unity卡死
上网查资料后:
unity设计 Unity中的多线程Thread的退出问题_中控|中控系统|展厅中控「绘芯中控」Unity里用Thread开启线程无法关闭【unity3d吧】_百度贴吧
发现原因就是unity跟C#创建的线程完全独立,即使将新线程设为后台线程,在unity主线程关闭时也无法关闭多线程。
通过Abort()也无法将其关闭(好像是无法立刻关闭,据说只有在sleep的时候才能有用没试验过),好像是因为无法立刻关闭的缘故
一般socket通讯的时候需要在多线程内使用while循环处理,这导致unity主线程结束后,后台仍在运行
解决方案
解决方法就是通过设置一个bool变量,通过break方法跳出,让系统自动回收线程。(如果通过break也不行就放在while(bool)内)
static bool isThreadOver;
private void OnEnable()
{
new Thread(Thread1);
new Thread(Thread2);
}
private void OnApplicationQuit()
{
ClientManager.Instance.Quit();
isThreadOver = true;
}
void Thread1()
{
while (true)
{
if (isThreadOver)
{
break;
}
}
}
void Thread2()
{
while (!isThreadOver)
{
}
}
这样就能解决多线程使用的冲突