串口接收线程退出与优先级问题
2008-07-24 09:20
495 查看
在EVC4调试模式下,调试串口时出现一个问题:串口有一个接收线程,在应用退出时,总是不能正常退出。
分析原因:从现象上来看,是线程因为调用WaitCommEvent()进入等待状态后,应用在退出时调用TerminateThread(),因为线程已经被Suspend而不能退出。
通过Remote Process Viewer查看应用,发现应用的两个线程的优先级不同。主应用线程的优先级是250,而接收线程的优先级是251。接收线程的优先级大于主应用线程的优先级,此可能是引起线程不能退出的原因。
但此接收线程的优先级为何会高于主应用线程的优先级?在程序没有设置优先级的情况下,接收线程的优先级应该等于主应用线程的优先级。
试验:在应用中调用优先设置函数,将线程的优先级设置为低于主应用线程的优先级。但线程的优先级会自动变化到高于主应用线程的优先级!原因不明!!!
但在另一个开发板上,应用和线程都可以正常退出。分析两板的不同,发现出现问题的板子串口虽然可以正常打开,但始终接收不到信息。
有同事说,会不会是串口线程因为等待不到信息,而继承了串口驱动的优先级。这种说法没有什么依据。
原因不明!!!
分析原因:从现象上来看,是线程因为调用WaitCommEvent()进入等待状态后,应用在退出时调用TerminateThread(),因为线程已经被Suspend而不能退出。
通过Remote Process Viewer查看应用,发现应用的两个线程的优先级不同。主应用线程的优先级是250,而接收线程的优先级是251。接收线程的优先级大于主应用线程的优先级,此可能是引起线程不能退出的原因。
但此接收线程的优先级为何会高于主应用线程的优先级?在程序没有设置优先级的情况下,接收线程的优先级应该等于主应用线程的优先级。
试验:在应用中调用优先设置函数,将线程的优先级设置为低于主应用线程的优先级。但线程的优先级会自动变化到高于主应用线程的优先级!原因不明!!!
但在另一个开发板上,应用和线程都可以正常退出。分析两板的不同,发现出现问题的板子串口虽然可以正常打开,但始终接收不到信息。
有同事说,会不会是串口线程因为等待不到信息,而继承了串口驱动的优先级。这种说法没有什么依据。
原因不明!!!
相关文章推荐
- 串口接收线程退出与优先级问题
- 串口接收线程退出与优先级问题
- 串口接收数据及时返回问题(电能表测试的上位机应用程序)
- 主线程退出问题
- labview串口发送与接收数据格式问题
- STM32移植RT-Thread后的串口在调试助手上出现:(mq != RT_NULL) assert failed at rt_mq_recv:2085和串口只发送数据不能接收数据问题
- 关于串口接收数据不全的问题
- 03.Windows下线程优先级问题
- 上拉电阻解决1036串口接收乱码问题
- STM32 ucosii 串口接收数据 遇到的问题及解决思路
- 利用epoll接收串口数据和socket进程通信问题
- 遇到的问题(一):智能家居中WIFI模块设备在接收底层家具设备串口数据时由于断帧而出现的指令丢失的情况处理
- Linux下接收串口数据0x0d变0X0a问题
- Android线程中执行“getevent”命令时的线程退出(结束)问题
- linux串口接收0x03等特殊字符的问题
- 安卓 关于接收串口数据的问题
- 线程调度的问题:Lock Convoy(锁封护)与Priority Inversion(优先级反转)
- 解决“串口接收数据时被截断”的问题
- 两个线程,一音/一视频udp数据包,优先级问题,在线等!
- Linux 多线程 线程中段退出 互斥量解锁问题