串列埠接收執行緒退出與優先順序問題

2022-08-30 16:45:14 字數 554 閱讀 1319

在evc4除錯模式下,除錯串列埠時出現乙個問題:串列埠有乙個接收執行緒,在應用退出時,總是不能正常退出。

分析原因:從現象上來看,是執行緒因為呼叫waitcommevent()進入等待狀態後,應用在退出時呼叫terminatethread(),因為執行緒已經被suspend而不能退出。

通過remote process viewer檢視應用,發現應用的兩個執行緒的優先順序不同。主應用執行緒的優先順序是250,而接收執行緒的優先順序是251。接收執行緒的優先順序大於主應用執行緒的優先順序,此可能是引起執行緒不能退出的原因。

但此接收執行緒的優先順序為何會高於主應用執行緒的優先順序?在程式沒有設定優先順序的情況下,接收執行緒的優先順序應該等於主應用執行緒的優先順序。

試驗:在應用中呼叫優先設定函式,將執行緒的優先順序設定為低於主應用執行緒的優先順序。但執行緒的優先順序會自動變化到高於主應用執行緒的優先順序!原因不明!!!

但在另乙個開發板上,應用和執行緒都可以正常退出。分析兩板的不同,發現出現問題的板子串列埠雖然可以正常開啟,但始終接收不到資訊。

有同事說,會不會是串列埠線程因為等待不到資訊,而繼承了串列埠驅動的優先順序。這種說法沒有什麼依據。

原因不明!!!

執行緒優先順序與執行緒安全

原文 程式設計思想之多執行緒與多程序 1 以作業系統的角度述說執行緒與程序 一文詳細講述了執行緒 程序的關係及在作業系統中的表現,這是多執行緒學習必須了解的基礎。本文將接著講一下執行緒優先順序和執行緒安全。現在主流作業系統 如windows linux mac os x 的任務排程除了具有前面提到的...

執行緒的優先順序及執行緒的同步問題

一.可以使用setpriority方法來設定 執行緒測優先順序 有可能影響執行緒的執行順序 1 min priority 10 max priority 5 max priority 預設 優先順序高的可能先被使用 如結果所示,每次c都會先執行,但只是有可能影響 public class threa...

Win32多執行緒 程序優先權與執行緒優先順序

1.優先權類別 priority class 優先權類別 是程序的屬性之一。這個屬性可以表現出這一程序和其他程序比較之下的重要性。win32 提供四種優先權類別,每乙個類別對應乙個基本的優先權層級。下表展示了四個優先權類別。優先權類別 priority classes 基礎優先權值 base pri...