• 串口接收线程退出与优先级问题


    在EVC4调试模式下,调试串口时出现一个问题:串口有一个接收线程,在应用退出时,总是不能正常退出。

     

    分析原因:从现象上来看,是线程因为调用WaitCommEvent()进入等待状态后,应用在退出时调用TerminateThread(),因为线程已经被Suspend而不能退出。

    通过Remote Process Viewer查看应用,发现应用的两个线程的优先级不同。主应用线程的优先级是250,而接收线程的优先级是251。接收线程的优先级大于主应用线程的优先级,此可能是引起线程不能退出的原因。

     

    但此接收线程的优先级为何会高于主应用线程的优先级?在程序没有设置优先级的情况下,接收线程的优先级应该等于主应用线程的优先级。

    试验:在应用中调用优先设置函数,将线程的优先级设置为低于主应用线程的优先级。但线程的优先级会自动变化到高于主应用线程的优先级!原因不明!!!

     

    但在另一个开发板上,应用和线程都可以正常退出。分析两板的不同,发现出现问题的板子串口虽然可以正常打开,但始终接收不到信息。

    有同事说,会不会是串口线程因为等待不到信息,而继承了串口驱动的优先级。这种说法没有什么依据。

     

    原因不明!!!

  • 相关阅读:
    js在线压缩网址
    java 排序
    java访问权限(子类继承父类的方法)
    重庆大学第八届编程大赛初赛1、2题目
    重庆大学oj系统——习题
    种花问题(Can Place Flowers)——两朵花不能相邻
    TFIDF计算
    python自定义聚合函数,merge与transform的区别
    AFM模型 pytorch示例代码
    python计算信息增益
  • 原文地址:https://www.cnblogs.com/91program/p/5253232.html
Copyright © 2020-2023  润新知