案例:
独立线程以5ms一包的速率接收指令(一共大概70-80种指令类型),并放入一个队列A
主线程中,根据定时器去队列A中取数据,并解析/计算/显示(速率:200包/秒)
现象:按理说这个收/发的频率是能保持平衡的,也就是收多少就处理多少,延迟会很小(可能就是一个指令的传输时间),但是实际现象是,随着时间的推移,队列A越来越大。
发现:调试的时候发现是处理数据的时候,判断数据包类型,并进行解析模块比较费时间(注释掉这块内容就不存在延迟了)。因此排除了代码本身的问题;
代码没问题,那就只能从设备方下手
解决方案:提高软件的优先级,让CPU优先处理我这个软件的计算处理
//REALTIME_PRIORITY_CLASS 实时
//HIGH_PRIORITY_CLASS 高
//ABOVE_NORMAL_PRIORITY_CLASS 高于正常
//NORMAL_PRIORITY_CLASS 正常
//BELOW_NORMAL_PRIORITY_CLASS 低于正常
//IDLE_PRIORITY_CLASS 空闲
GetCurrentProcess():当前软件进程
int main(int argc, char *argv[])
{
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS );
}
查看进程的当前CPU优先级:
任务管理器-鼠标右键(软件进程)-转到详细详细-鼠标右键(软件进程)-设置进程优先级
然后,你启动软件的时候就会发现,应用程序优先级,由默认的正常,改成了你需要的!