Unity中的多线程Thread的退出问题

时间:2018-12-25
本文章向大家介绍Unity中的多线程Thread的退出问题,主要包括Unity中的多线程Thread的退出问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在Unity中用到了网络通信,因此使用了多线程。由于收发需要多次执行,因此在多线程中加了个while(true),然后就发现在接收线程中,如果设置为多线程,点击play 执行unity,那么第二次就打不开,就会一直卡顿在那,如果把接收放在update主线程中,那么第一次点击play 执行unity就会卡顿在那(怀疑是接收一直没接收到,阻塞在那里)。

于是简单跑了个例子

while (true)
        {
            print(" start Receiving");
            
        }

在多线程中执行print,即使关闭了unity工程 print还是在一直输出,于是查了一些资料,要用一个bool变量来控制


public void Receive(){
 while (true)
        {
            print(" start Receiving");
            if (isend)
                break;
        }
    responder.Close();
    print("state1 " + ReceiveThread.ThreadState);
    if (ReceiveThread.ThreadState == ThreadState.Running)
        {
            print("接收线程关闭!");
            ReceiveThread.Abort();
            
        }
}

private void OnDestroy()
    {
        //关闭通讯线程
        isend = true;
    }

这样当主线程关闭的时候会把isend设为true,子线程就会退出,就可以成功解决卡顿的问题