使用mscomm控件,如何实现多线程? 使用三个mscomm控件,,其中有两个会同时接受数据,需要使用多线程吗?在mscomm中如何使用? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 各干各的,如果两个同时串口同时有接受时间会不会丢数据啊?下面这段话正确吗?程序中有三个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事件就可以了。 这样可能嘛,串口数据是不允许共享的,也就是说一个MSCOMM控件只能对映一个串口,一但占有就独享资源知道自己释放,其他MSCOMM想打开那个串口不可能 http://topic.csdn.net/u/20101024/21/6f224047-8284-4737-adc0-0fdb00bf5586.html?6436正好,我刚发了个这样的程序,大家可以看看怎么回事。。知道的别忘回复哦 VC6下如何读写超过4G的文件 很是郁闷的一个问题 关于 _memccpy 函数指针成员变量的问题 求一段E文翻译 将AVI文件的文件头加密以后,VC中怎么实现解密此文件并播放?? vc写的dll,在vb调用,为何无结果?VC爱好者帮忙! 我想做两个程序,可以互相传递文件,用什么类可以做到呢?谢谢大家! 请看过《深度解析c++对象模型》或者对c++机制比较了解的人看看 〉〉〉有人用过ListView_SetCheckState,为什么我用ListView_SetCheckState时vc编译会说“不可识别的标识符“???? 应用程序因徨而“未响应” 不错 有没有人可以解决这个开发难题
程序中有三个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事件就可以了。
正好,我刚发了个这样的程序,大家可以看看怎么回事。。
知道的别忘回复哦