VB mscomm1控件的RThreshold 属性 触发oncomm事件

时间:2022-09-06 11:57:02
mscomm1.RThreshold=1 时 是接受多少字节 触发一次 oncomm 事件 

帮助文档说明如下
设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。

我在写程序时 一次接收20个字节 为十六进制的1-19,0 想接收到一个字符就显示出来  结果是显示1  9  11(十进制的17)
在网上找原因时 看到某个达人 写的:
      每1-8字节按实验只触发了1次MSComm1_OnComm事件。
明显与我的程序相符合 1+8=9;9+8=17

特在此求证 

7 个解决方案

#1


没错,就是这样,它与硬件有关.如果你始终接收20字节,可设置RThreshold = 20

#2


关注 没听明白

#3


以下内容不权威,仅供参考
1、RThreshold=1设置了每接收到一个字符就产生一次 OnComm事件
2、上和条设置不代表你再读时接收缓存区内只有一个字符
3、楼主检查下你的程序中MSCOMM的InBufferSize是不是设置的太小,默认为1024
4、在接收中断中读接收缓冲区数据,最好用数组去读,这样才能读的全

#4



“每接收到一个字节就会触发一次 OnComm 事件”是没有错的。但并不表示一个 OnComm 事件只能读取到一个字符。因为事件触发后,传输仍在进行。

如果发送端以较长的间隔发送字符,你可以用这种单字符触发的方式,同时,将 InputLen 也设置为 1。

否则,你应该将 RThreshold 设置为 20,将接收到的字节一次取回。

#5



楼主大概没有搞清楚用 MSCOMM 控件时,硬件和系统以及应用程序分别做些什么。

RThreshold = 1 只是告诉系统,当硬件和系统(统称底层)接收到 1 个字节的时候,通知应用程序来处理。这个时候,底层是在继续接收的。

#6


该回复于2010-12-24 14:32:29被版主删除

#1


没错,就是这样,它与硬件有关.如果你始终接收20字节,可设置RThreshold = 20

#2


关注 没听明白

#3


以下内容不权威,仅供参考
1、RThreshold=1设置了每接收到一个字符就产生一次 OnComm事件
2、上和条设置不代表你再读时接收缓存区内只有一个字符
3、楼主检查下你的程序中MSCOMM的InBufferSize是不是设置的太小,默认为1024
4、在接收中断中读接收缓冲区数据,最好用数组去读,这样才能读的全

#4



“每接收到一个字节就会触发一次 OnComm 事件”是没有错的。但并不表示一个 OnComm 事件只能读取到一个字符。因为事件触发后,传输仍在进行。

如果发送端以较长的间隔发送字符,你可以用这种单字符触发的方式,同时,将 InputLen 也设置为 1。

否则,你应该将 RThreshold 设置为 20,将接收到的字节一次取回。

#5



楼主大概没有搞清楚用 MSCOMM 控件时,硬件和系统以及应用程序分别做些什么。

RThreshold = 1 只是告诉系统,当硬件和系统(统称底层)接收到 1 个字节的时候,通知应用程序来处理。这个时候,底层是在继续接收的。

#6


该回复于2010-12-24 14:32:29被版主删除

#7