多执行绪与底层等待问题

楼主: 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