一开始的模式:
开两个线程,一个线程A用于接收CAN数据,将解析的数据,堆入到Q堆栈中;
另开一个线程B,用于从Q堆栈中将数据取出来,根据标志信息将同一帧的数据放入到同一队列中,每收集完一帧数据,触发界面显示事件,将队列数据databind到指定的chart.series中。(用databind的好处是,不会闪屏,可以直观的看到目标检测是否稳定,不要用clear,显示效果不好);
问题:目标点迹少的情况,还好;点迹一多,入栈快,而取数据的速度跟不上,(关键耗时的地方是触发显示时间),这样堆栈里的数据越积越多,就出现了显示轨迹延时现象。
优化:
思路:显示没必要用触发模式,取消处理线程时间;既然主要耗时是显示,而显示又没必要每个帧都显示,只要保持最新的帧,用于显示就好了;
处理:将显示的内容用全局变量(主要还是队列或字典啦)存储,利用定时器,定时将他们绑定到chart.series的points上;偷懒,直接把B线程删了,直接在接收线程A里,将同一帧的数据堆到全局变量中(注意中转),用于更新显示点迹。
写的有些乱,基本功能可以实现,可以轻松应对雷达帧处理时间,做到无延时显示~
tuxiaobai_2015