多執行緒與底層等待問題

作者: albert2942 (無言)   2018-03-13 13:19:21
各位前輩好,小弟寫了一個程式,但是有控制4-5個RS232,因為有些視窗是需要反饋,因
此需要等待RS232的訊息,因為不知道什麼時候會回傳給電腦,所以都建立thread在後台
運作,但是問題來了,當我用comport.write送出訊息,我在thread那端持續監聽,看有
無回送,然後再將收下的訊息儲存後,判斷這個收到是正確或非正確,或是timeout,只是
這個用await task.delay好像也不是很精確的等待,如果用thread.sleep又會卡死程式,
更不用說while loop,因為後面程序要依照這個狀態進行動作,所以要很精確,一定要等
待到,但又不能讓畫面卡死,實在很苦惱。因為牽涉人身安全性的問題,所以一堆都是防
範機制,直流600V的電源切換與充電放電.不小心就燒機器了,先前沒做好,做實驗就燒
了幾十顆IGBT!
大家有什麼好建議嗎?
在底層的程序與上層的對應
因為特殊儀器,要假定板子會當機,儀表會損壞,若損壞則警報立即發出並中斷所有電源
與放電以避免人員傷害!
作者: jamyang (Jack)   2018-03-13 16:29:00
接受可以寫在event裡面喔
作者: lightyen (lightyen)   2018-03-13 17:13:00
我是寫一個func裡面用while loop收資料 每次都Sleep一毫秒然後在根據收到的資料發出event
作者: Litfal (Litfal)   2018-03-13 18:22:00
將com那邊的讀寫提至一個controller層,以便處理狀態與交握,狀態複雜的話請善用狀態模式。UI層使用這個controller而不直接控制com
作者: jamyang (Jack)   2018-03-13 19:52:00
發送命令後改變旗標,receive event檢查正確恢復旗標,然後做一個timer檢查旗標這樣呢
作者: smmoon (邦)   2018-03-14 13:42:00
硬體的保護跟安全規劃應該從硬體上下手吧? 怎麼會靠人機?

Links booklink

Contact Us: admin [ a t ] ucptt.com