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

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

 (2014-10-13 13:25:20)
23224621_ixgw.gif转载▼
分类: unity

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

代码大概这样:

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假死。

解决方法:

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

 

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

这样就可以了。

不过有时候还是会假死,不知道是多线程的问题还是unity本身的问题,但是概率低了很多,基本比你电脑死机高一点。

转载于:https://my.oschina.net/u/185335/blog/390606

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值