這個問題已經(jīng)解決了,。 首先,,串口支持全雙工模式,即串口的接收緩沖區(qū)和發(fā)送緩沖區(qū)是分開的,,故可以使用多個線程同時,,不互斥的同時讀寫串口。 然后,,定義4個線程:一個主線程(界面線程,,啟動時的主線程),一個串口監(jiān)聽線程,,一個處理接收到的串口數(shù)據(jù)的線程,,一個寫串口的線程。另外,,再定義兩個緩沖區(qū)隊列,,一個存放從串口接收到的數(shù)據(jù)(Qr),一個存放向串口寫的命令(Qw),。 發(fā)送時:界面線程向Qw中插入一條向串口發(fā)送的數(shù)據(jù)幀,,然后返回;寫串口的線程從隊列中取數(shù)據(jù)幀寫到串口,。兩個線程間是一個生產(chǎn)者-消費者問題,; 接收時:串口監(jiān)聽線程接收完整數(shù)據(jù)幀,放入Qr,,然后繼續(xù)監(jiān)聽串口,;處理接收到的串口數(shù)據(jù)的線程從Qr中讀取數(shù)據(jù)幀并處理,兩個線程間也是一個生產(chǎn)者-消費者問題,。 |
|