加载中…
个人资料
每天都是咸鱼的fox
每天都是咸鱼的fox
  • 博客等级:
  • 博客积分:0
  • 博客访问:36,652
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

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

(2014-10-13 13:25:20)
分类: 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本身的问题,但是概率低了很多,基本比你电脑死机高一点。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
前一篇:unity中的print
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

    < 前一篇unity中的print
      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有