使用mscomm控件,如何实现多线程?

jszhuweiwei 2009-09-01 09:48:44
使用三个mscomm控件,,其中有两个会同时接受数据,需要使用多线程吗?在mscomm中如何使用?
...全文
371 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangshi3465 2010-10-24
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20101024/21/6f224047-8284-4737-adc0-0fdb00bf5586.html?6436
正好,我刚发了个这样的程序,大家可以看看怎么回事。。
知道的别忘回复哦
adidas_1983_ 2009-11-11
  • 打赏
  • 举报
回复
想进来看看如何实现多线程,结果没得!
melody1304 2009-10-23
  • 打赏
  • 举报
回复
这样可能嘛,串口数据是不允许共享的,也就是说一个MSCOMM控件只能对映一个串口,一但占有就独享资源知道自己释放,其他MSCOMM想打开那个串口不可能
kaven_yang 2009-10-15
  • 打赏
  • 举报
回复
看过,顶一下
wqf2009 2009-09-27
  • 打赏
  • 举报
回复
ding
yangbo_cuit 2009-09-08
  • 打赏
  • 举报
回复
不需要
贝隆 2009-09-04
  • 打赏
  • 举报
回复
不需要,硬件上是独立的。根本不相影响。
jszhuweiwei 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 feilinhe 的回复:]
如果是三个控件使用三个串口的话,哪就,互不影响,如果都从同一个串口接收那就有问题了,这样的话其实用一个就可以了
[/Quote]
各干各的,如果两个同时串口同时有接受时间会不会丢数据啊?下面这段话正确吗?
程序中有三个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事件就可以了。
feilinhe 2009-09-02
  • 打赏
  • 举报
回复
如果是三个控件使用三个串口的话,哪就各干各的,互不影响,如果都从同一个串口接收那就有问题了,这样的话其实用一个就可以了
maple_zhj 2009-09-02
  • 打赏
  • 举报
回复
串口控件,不是接收后 回调的吗?
需要多线程?
jszhuweiwei 2009-09-02
  • 打赏
  • 举报
回复
再顶一下

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧