多线程中使用UNITY变量导致线程执行断掉却又不报错的问题
生活随笔
收集整理的這篇文章主要介紹了
多线程中使用UNITY变量导致线程执行断掉却又不报错的问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
時間:2020.9.29,XMoba第一次Demo
子線程調(diào)用UNITY的相關(guān)變量或函數(shù)導致程序執(zhí)行過程斷掉,且不報任何錯誤的一個BUG
一,問題現(xiàn)象
網(wǎng)絡(luò)異步連接的回調(diào)函數(shù)中使用了一個函數(shù)XLog.log,此函數(shù)中使用了UNITY的Time.FrameCount,導致程序執(zhí)行到這一行時異常退出,但不報任何錯誤。
void OnConnectCallback(IAsyncResult iar){netState = XNetState.ConnectReturn;var info = tcpClient.Connected ? $"【服務(wù)器連接成功】" : $"【服務(wù)器連接失敗】";XLog.Log(E_LogModule.Net, $"{info}, {curIp},{curPort},{netState}");try{tcpClient.EndConnect(iar);if (tcpClient.Connected){tcpClient.GetStream().BeginRead(tempBuffer, 0, tempBuffer.Length, OnReceiveCallback, null); //開始接收}}catch (Exception e){UnityEngine.Debug.LogError($"【網(wǎng)絡(luò)接收出錯】{curIp},{curPort},{e}");}}二,解決方案
將整個回調(diào)函數(shù)內(nèi)部包在try-catch中,確保異常不會靜默發(fā)生,如下
void OnConnectCallback(IAsyncResult iar){try{netState = XNetState.ConnectReturn;var info = tcpClient.Connected ? $"【服務(wù)器連接成功】" : $"【服務(wù)器連接失敗】";XLog.Log(E_LogModule.Net, $"{info}, {curIp},{curPort},{netState}");tcpClient.EndConnect(iar);if (tcpClient.Connected){tcpClient.GetStream().BeginRead(tempBuffer, 0, tempBuffer.Length, OnReceiveCallback, null); //開始接收}}catch (Exception e){UnityEngine.Debug.LogError($"【網(wǎng)絡(luò)接收出錯】{curIp},{curPort},{e}");}}三,這樣處理后就能在運行捕獲到UNITY的報錯,如下:
?[Net]? 錯誤:【網(wǎng)絡(luò)接收出錯】10.24.1.194,21010,UnityEngine.UnityException: get_frameCount can only be called from the main thread.
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的多线程中使用UNITY变量导致线程执行断掉却又不报错的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络模拟工具
- 下一篇: C++ 知识记录-LZL