主线程在临界区被卡住!解决思路
主线程在临界区被卡住!
我写的一个多线程读写串口程序
ReadThread用来监视串口接收到的数据 然后设置事件 让AnaThread开始执行解析 解析完毕后 设置全局变量SYS_STATUS=ST_NONE
AnaThread 是解析线程 waitforsignalobject,等到ReadThread设置事件后就去解析读出来的数据
heartThread是心跳线程 没隔一秒发送一个心跳包,然后置SYS_STATUS=ST_WAIT_HEART
主线程是界面 当我点击一个按钮的时候就往串口发送一个数据包,并设置系统状态为ST_WAI_XXX
为了防止心跳线程和主线程互相干扰,我设置了一个临界区 每个线程想发送数据的时候都要进入临界区EnterCriticalSection,然后while(SYS_STATUS!=ST_NONE); 一直等到系统状态时ST_NONE了再开始发送数据,发送完了设置系统状态,退出临界区。
现在的问题是,我一运行界面就会卡死 而且CPU占用率非常高
但是我就算给串口发送数据,readThread也收不到数据,不能把数据给解析线程,于是系统将就一直不是ST_NONE了
请问这是怎么回事
假如我的心跳线程正在发送数据,这时候我的主线程要发送数据了,应该就会在enterCriticalSection那里挂起了,等心跳线程发送完毕了就去等待系统状态为ST_NONE。 这时候我要是给串口发送数据了,应该就是readThread接到数据了然后去解析啊,解析完了系统状态就ST_NONE了啊 怎么会卡住呢?
这是怎么回事 有没有什么好的方法解决呢??
谢谢大家!
------解决方案--------------------
主线程等待临界区,UI线程就会阻塞,肯定有些卡啊。最好不要这样设计。
------解决方案--------------------
我写的一个多线程读写串口程序
ReadThread用来监视串口接收到的数据 然后设置事件 让AnaThread开始执行解析 解析完毕后 设置全局变量SYS_STATUS=ST_NONE
AnaThread 是解析线程 waitforsignalobject,等到ReadThread设置事件后就去解析读出来的数据
heartThread是心跳线程 没隔一秒发送一个心跳包,然后置SYS_STATUS=ST_WAIT_HEART
主线程是界面 当我点击一个按钮的时候就往串口发送一个数据包,并设置系统状态为ST_WAI_XXX
为了防止心跳线程和主线程互相干扰,我设置了一个临界区 每个线程想发送数据的时候都要进入临界区EnterCriticalSection,然后while(SYS_STATUS!=ST_NONE); 一直等到系统状态时ST_NONE了再开始发送数据,发送完了设置系统状态,退出临界区。
现在的问题是,我一运行界面就会卡死 而且CPU占用率非常高
但是我就算给串口发送数据,readThread也收不到数据,不能把数据给解析线程,于是系统将就一直不是ST_NONE了
请问这是怎么回事
假如我的心跳线程正在发送数据,这时候我的主线程要发送数据了,应该就会在enterCriticalSection那里挂起了,等心跳线程发送完毕了就去等待系统状态为ST_NONE。 这时候我要是给串口发送数据了,应该就是readThread接到数据了然后去解析啊,解析完了系统状态就ST_NONE了啊 怎么会卡住呢?
这是怎么回事 有没有什么好的方法解决呢??
谢谢大家!
------解决方案--------------------
主线程等待临界区,UI线程就会阻塞,肯定有些卡啊。最好不要这样设计。
------解决方案--------------------