首页 新闻 搜索 专区 学院

问:线程间同步问题

0
悬赏园豆:10 [已解决问题] 解决于 2007-12-27 16:38
<STRONG>应用场景描述</STRONG>:PC 和 一个终端设备通过串口连接,PC 发出指令,终端收到指令后会在几个毫秒内给出相应响应,然后 PC 发出一些后续指令。<BR><BR><STRONG>软件任务</STRONG>:通过软件界面控制发出数据,等待终端响应,并将收到的数据实时的显示在窗口界面上。<BR><BR><STRONG>软件实现</STRONG>:利用.net类库的SerialPort组件实现串口通信,串口发出数据是在主线程内完成的,串口收到数据触发 ReceivedData 事件,但是该事件并不在主线程触发,所以不能将数据直接刷在窗口界面上,那么我利用了 Invoke ,将数据显示触发在主线程。<BR><BR><STRONG>问题提出</STRONG>:主线程在通过串口发出数据后,为了等待响应,我使用了Sleep(100),让主线程休眠100ms,但是如果50ms内就收到数据,ReceivedData 事件所在的线程就会调用 Invoke,让主线程显示数据,但是此时主线程在休眠,我的问题就是,那么 ReceivedData 事件所在的线程是否也会因此被阻塞 50ms 呢?<BR><BR>
杨连国的主页 杨连国 | 菜鸟二级 | 园豆:295
提问于:2007-12-27 11:18
< >
分享
最佳答案
0
会被阻塞。如果你不希望阻塞,可以使用BeginInvoke方法。 另外, 你使用SerialPort组件进行串口通讯。应该就不需要在让主线程Sleep了吧。我觉的流程应该是如下: 1. 挂接ReceivedData事件 2. 通过SerialPort组件发送数据 3. 更新Form的状态。退出ButtonClick处理函数 4. 然后再ReceivedData事件中再次更新Form状态。
Colin Han | 老鸟四级 |园豆:3041 | 2007-12-27 13:13
其他回答(1)
0
会被阻塞。
亚历山大同志 | 园豆:48 (初学一级) | 2007-12-27 12:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册