使用三个mscomm控件,,其中有两个会同时接受数据,需要使用多线程吗?在mscomm中如何使用?

解决方案 »

  1.   

    各干各的,如果两个同时串口同时有接受时间会不会丢数据啊?下面这段话正确吗?
    程序中有三个MSComm控件,都是用oncomm事件来接收数据的,这时是多线程方式接收数据吗?
    响应时间最快是多少ms,多谢指教! 
    算不算多线程不好说,
    每个MSComm控件都是从系统消息队列里接收到消息然后做出响应的。
    我自己感觉Vc应该是哪个MSComm先接到Oncomm事件就先执行哪个的事件响应,
    除非在处理过程中主动执行DoEvent去响应其他事件,
    否则其他MSComm即使有事件到来也没机会接到,
    因为我自己的认识经历告诉我,
    事件中断应该是不能被同级别中断抢占的。
    但是如果在一个MSComm事件处理没完成的时候调用DoEvents
    即暂时主动放弃控制权以响应后继事件(比如按钮操作,窗口刷新等,当然也包括其他的MSComm事件)
    理论上应该可以实现多个MSComm控件“并发”(其实好象还是轮流)接收的还有,如果你每个MSComm的OnComm事件响应过程都很短,
    而串口接收的速度很慢,最高也就115K左右,
    而且产生OnComm的间隔很长,
    因为你可以设置较大的InBuffer让它装满后再产生事件那么完全没必要为它是否多线程担心,
    因为以现在的计算机的运算速度,
    响应一次MSComm也就是微秒级的时间,
    应该完全感觉不到对其他控件有什么影响。还有,不管你当前的OnComm有没有处理完,
    都不影响其他MSComm的接收、发送和产生事件的过程,
    只是你暂时没办法响应和干预而已。新到的数据不会因为你没有处理而丢失
    而是暂时存放在 InBuffer里。后台怎么接收是硬件电路的问题,
    接收后怎么保存是MSComm控件实现细节的问题,
    都不归你Vc程序管
    你只需要把你要发的数据送给MSComm,
    从InBuffer里取出你要的数,
    并尽可能及时地响应OnComm事件就可以了。
      

  2.   

    这样可能嘛,串口数据是不允许共享的,也就是说一个MSCOMM控件只能对映一个串口,一但占有就独享资源知道自己释放,其他MSCOMM想打开那个串口不可能
      

  3.   

    http://topic.csdn.net/u/20101024/21/6f224047-8284-4737-adc0-0fdb00bf5586.html?6436
    正好,我刚发了个这样的程序,大家可以看看怎么回事。。
    知道的别忘回复哦