如上图,通过开启一个子线程来打印,这样打印窗口既不会造成堵塞(即不会挂起后蜂涌打印,而是很平滑的依次循环打印),也不会造成update中的堵塞。
问题来了,若退出程序,子线程仍然在工作的话,就应该关闭子线程。网上有说设置IsBackground属性为true,可以在主线程退出时,子线程也会退出,但是试了一下不行。
考虑通过在OnApplicationQuit事件中,调用Abort()方法来退出线程,试了一下依旧不行,在退出主线程后,子线程依旧执行。
试了一下,在子线程循环中开启Thread.Sleep(一个很短的时间),abort终止线程便生效。但这种方法肯定不可取。如图:
再测试了通过bool变量来控制线程的执行,可取,如下代码:
bool isQuit = false;
public int maxValue = 10000;
Thread aThread;
void Awake()
{
Debug.Log("awake trigger!");
}
void Start()
{
Debug.Log("start trigger!");
aThread = new Thread(new ThreadStart(DoPrint));
aThread.Start();
}
private void DoPrint()
{
for (int i = 0; i < maxValue; i++)//子线程执行完后其IsAlive属性变成false
{
if (isQuit)
{
return;
}
Debug.Log("value is:" + i);
}
}
void Update()
{
Debug.Log("update trigger!");
}
void OnApplicationQuit()
{
if (aThread.IsAlive)
{
isQuit = true;
Debug.Log("aThread is still alive,you quit and abort");
}
else
{
Debug.Log("aThread is null,you quit");
}
}