【转】unity中多线程Socket通讯,unity假死(未响影)

unity中多线程Socket通讯,unity假死(未响影)

 (2014-10-13 13:25:20)
分类: unity

有几日,主程用.net的socket作网络通讯的小demo,用了一个简单的socket,两个线程,一个接收线程,一个发送线程。 html

代码大概这样: 网络

01  try
02          {
03              Connector . ip  =  this . ip;
04              Connector . port  =  this . port;
05              SendThread  st  =  new  SendThread();
06              ThreadStart  ts  =  new  ThreadStart( st . run);
07              t  =  new  Thread( ts);
08              t . Start();
09                                                 
10              ReceiveThread  rt  =  new  ReceiveThread();
11              ThreadStart  ts2  =  new  ThreadStart( rt . run);
12              t2  =  new  Thread( ts2);
13              t2 . Start();
14          }
15          catch ( Exception)
16          {
17              print( "链接出错");
18          }

Connecto是封装了.ne socket的一个单例。看起来没有什么问题,运行也正常。可是第二次运行的时候,unity编辑器就假死(未影响)了。开始觉得是mono支持的.net版本问题,最后发现是unity在关闭调试的时候程序的线程没有关闭。应该是unity单线程中,多线程不没控制。以前的socket还链接着的,第二次再次链接让socket阻塞,致使unity假死。 多线程

解决方法: socket

void OnDestroy (){   t . Abort ();   t2 . Abort ();    conn . Close();    }

 

只要在unity销毁对象的时候,把线程kill就好了。固然是在OnDestroy()了。可是主程说好像kill不了,线程有保护什么的(这里反正我不懂-_-!!)。以后在OnDestroy()里把以前的socket给断开。

这样就能够了。 编辑器

不过有时候仍是会假死,不知道是多线程的问题仍是unity自己的问题,可是几率低了不少,基本比你电脑死机高一点。 this

相关文章
相关标签/搜索