博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3d报告奇怪的错误CompareBaseObjectsInternal can only be called from the main thread.
阅读量:5345 次
发布时间:2019-06-15

本文共 1398 字,大约阅读时间需要 4 分钟。

其中使用了该项目.NET的Async Socket代码。后来不知道什么时候这个奇怪的错误的出现:

CompareBaseObjectsInternal can only be called from the main thread.

Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.

怪异是由于报错并没有影响程序运行,而是正确地接收了server返回的信息,而且通过回调正确显示出来。说明回调被运行了。可是从回调再调用一个解析器却一直不运行。是不是上面的错误导致的?

搜索百度CompareBaseObjectsInternal关键词仅仅有8个结果,相对有些意义,可是博文为转载。后来看到原文,大致的意思是假设从子线程调用主线程的callback。须要给回调加一个interface。

这个和我的情况不太一样,參考意义不大。

然后google。非常不幸古大哥一直载入载入。

。。

于是去yahoo,竟然还没有抽筋。

最前面搜索出来的几篇文章就是unity论坛上的。大致看出一些眉目。

 

 

#!

 

分析出来我的问题大概是在主线程里面注冊了回调,

        //注冊全部事件的响应代码

        NetEventManager.GetInstance().netMessageReceived_event += OnNetMessageReceived;
        NetEventManager.GetInstance().gateServerConnected_event += OnGateServerConnected;
        NetEventManager.GetInstance().errorMessageOccured_event += OnErrorReceived;

然后socketclient对象是异步的,所以做了多线程处理,当socketclient接收到消息时,回调了主线程的函数(继承自monobehaviour),这时候就导致了报错。上面第一篇unity论坛博文解释得比較清楚,大概就是unity对于API调用主线程做了限制:

“Unity chose to limit API calls to main-thread, to make a simple and solid threading model that everyone can understand and use.”

依据这个解释,我把上面的代码凝视掉。程序就不报错了。

预计这些事件响应代码要放到非monobehavior的类里面去。就能够避免上面说的线程安全问题。

 

因为我感兴趣的多线程编程的基本或白色,上面的解释是正确的、有没有更好的解决办法。也希望你有种。

版权声明:本文博主原创文章。博客,未经同意不得转载。

转载于:https://www.cnblogs.com/gcczhongduan/p/4830428.html

你可能感兴趣的文章
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>
web.xml 中加载顺序
查看>>
pycharm激活地址
查看>>
hdu 1207 四柱汉诺塔
查看>>
Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)
查看>>
我的PHP学习之路
查看>>
【题解】luogu p2340 奶牛会展
查看>>
对PostgreSQL的 SPI_prepare 的理解。
查看>>
解决响应式布局下兼容性的问题
查看>>
使用DBCP连接池对连接进行管理
查看>>
【洛谷】【堆+模拟】P2278 操作系统
查看>>
hdu3307 欧拉函数
查看>>
Spring Bean InitializingBean和DisposableBean实例
查看>>
Solr4.8.0源码分析(5)之查询流程分析总述
查看>>
[Windows Server]安装系统显示“缺少计算机所需的介质驱动程序”解决方案
查看>>
[容斥][dp][快速幂] Jzoj P5862 孤独
查看>>
Lucene 学习之二:数值类型的索引和范围查询分析
查看>>
软件开发工作模型
查看>>
Java基础之字符串匹配大全
查看>>