建设商城网站的书籍钱,越秀免费网站建设,中山市企业网站建设,网易云网站开发一.线程中不允许调用unity组件api
解决方法#xff1a;可以使用bool值变化并且在update中监测bool值变化来调用关于unity组件的API.
二.打印并且将信息输出到list列表中
多线程可能同时输出多条信息。输出字符串可以放入Queue队列中。队列可以被多线程插入。
三.启用socke…一.线程中不允许调用unity组件api
解决方法可以使用bool值变化并且在update中监测bool值变化来调用关于unity组件的API.
二.打印并且将信息输出到list列表中
多线程可能同时输出多条信息。输出字符串可以放入Queue队列中。队列可以被多线程插入。
三.启用socket连接server
在主线程中直接连接server如果网络通信正常程序运行也正常。但是如果网络中断或者连接较慢就会出现程序卡顿。所以要在启动一个线程来连接server。并在连接server成功后启动一个新的线程来接听server给客户端发送的消息。
即 thread1启动连接socket。thread2启动监听。 thread1 new Thread(Connect);thread1.IsBackground true;thread1.Start();
socketSend new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPAddress iPAddress IPAddress.Parse(ip);IPEndPoint point new IPEndPoint(iPAddress, port);socketSend.Connect(point);LogManager.Instance.ShowLog(连接成功 , ip ip port port);thread2 new Thread(Received);thread2.IsBackground true;thread2.Start();
但是当我们stop run unity然后再次run unity的时候我们会发现编辑器在不断加载脚本会卡很久。经过多次测试我发现是线程没有结束。所以要在OnDisable时将线程中断。 void CloseAll(){//这里要先终止线程 在终止socket //不然会报错 SocketException: 一个封锁操作被对 WSACancelBlockingCall 的调用中断if (thread2! null){try{thread2.Abort();}catch (Exception e){Debug.Log(e.Message);}}if (thread1! null){try{thread1.Abort();}catch (Exception e){Debug.Log(e.Message);}}
if (socketSend!nullsocketSend.Connected){try{socketSend.Shutdown(SocketShutdown.Both); socketSend.Close(); }catch (Exception e){Debug.Log(e.Message);}}}
注意一定要先中断thread2在中断thread1.不然unity还是会不断reload scrip,使编辑器卡在那里。