调试最长的一帧(第五天)

调着比较上瘾了。没第三天那么费劲了。

先看总体

依然在realize()里面,不过第五天就要把这个解决了。

继续跟过去,遍历所有图形上下文设备,对于每个图像上下文指针gc,判断是否为图形窗口类,负责把鼠标焦点转到当前窗口

启动OSG内部定时器并开始计时

 

找到当前视景器和所有的图形上下文设备的事件队列_eventQuue,并设定它们的启动时刻为当前时间

 

 

下面是关键,设置线程模型

 

电子书上介绍了四种线程模型。

1,SingleThreaded: 单线程,任何配置下可以使用,osg不会创建任何新线程来完成场景的筛选和渲染                                                           (配置低)

2,CullDrawThreadPerContext:为每个图形上下文创建一个图形线程并行渲染+分配到多CPU(如果有)+每帧结束前强制同步所有线程  (应用范围有限)

3,DrawThreadPerContext:为每个图形上下文创建一个图形线程并行渲染+分配到多CPU(如果有)+在当前帧所有线程完成前开始下一帧

4,CullThreadPerCameraDrawThreadPerContext:为每个图形上下文和每个摄像机创建图形线程并行渲染+分配到多CPU(如果有)+在当前帧所有线程完成前开始下一帧(最优)

 

电子书上介绍了单线程多处理器系统

 

先设置下线程模型为单线程,

好了,OK了

如果线程运行,则停止线程,因为这里是初始化,还在realize()

这里根据cpu的亲缘性,cpu0处理用户更新、筛选和渲染等一切事务,而使用cpu1来处理场景的两个分页数据库(DatabasePager)线程(分别用于处理本地和网络的场景数据)

我的是8核的,五年前的老机子

 

 

 

thread=NULL,因为局部存储区还没存东西。

获取当前视景区的场景,含图形根节点,分页数据库和分页图像库 。viewer单场景,compositer可能包含多场景

 

 

再熟悉了下各个类,

拉回来,以上是ViewerBase::setUpThreading()在单线程的情况,再看看多线程的情况,进入else

 

由于后面电子书上有,所以,只粗略看下,暂时不展开

 

继续往下走,到了realize()的尾声

 

 

将注释去掉,启用编译上下文

 

 

 

 

 

 

 

 

 

 

 

 

 

这里不做扩展了,因为不是主要流程。也说了会崩溃,

实际上,已经崩溃了

 

 

pbuffer有问题,所以就不从这里调试了。

 

第五天的内容就要结束了,

 

 

 

### Canoe 测试中第一帧报文发送失败的解决方案 在Canoe测试环境中遇到的第一帧报文发送失败问题可能由多种因素引起。为了有效解决问题,可以从以下几个方面入手: #### 1. 配置检查 确保CAN网络配置无误是首要任务。这包括但不限于波特率设置、节点ID以及通信参数的一致性。任何不匹配都可能导致首帧无法成功传输。 #### 2. 初始化过程优化 有时初始化阶段存在的延迟或错误会阻碍首个消息的成功发出。可以尝试调整应用程序启动顺序或是增加适当的等待时间让系统有足够的时间准备就绪再执行发送操作[^2]。 #### 3. 使用CAPL脚本调试 借助CAPL(Controller Area Network Application Programming Language)编写简单的诊断脚本来监控并修正潜在的问题点。例如,在`On Start`事件中加入日志记录语句以便于追踪首次触发时的状态变化情况;或者是在实际发送之前先进行一次模拟预演以确认环境正常工作[^5]。 ```capl variables { message msgFirstFrame; } on start { // 记录当前状态用于后续排查 write("Starting first frame transmission..."); // 设置要发送的消息属性 setMsg(msgFirstFrame); output(msgFirstFrame); // 输出提示信息表示已尝试发送 write("Attempted to send the first frame."); } ``` #### 4. 清理缓存与重装软件 如果上述措施未能见效,则可能是由于软件内部残留的数据影响到了正常的运行流程。按照官方给出的方法卸载现有版本,并彻底清除临时文件夹中的相关内容之后再次安装最新补丁后的Canoe程序能够帮助排除此类干扰源[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值