【轉】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

相關文章
相關標籤/搜索