帮助文档说明如下
设置 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、在接收中断中读接收缓冲区数据,最好用数组去读,这样才能读的全
1、RThreshold=1设置了每接收到一个字符就产生一次 OnComm事件
2、上和条设置不代表你再读时接收缓存区内只有一个字符
3、楼主检查下你的程序中MSCOMM的InBufferSize是不是设置的太小,默认为1024
4、在接收中断中读接收缓冲区数据,最好用数组去读,这样才能读的全
#4
“每接收到一个字节就会触发一次 OnComm 事件”是没有错的。但并不表示一个 OnComm 事件只能读取到一个字符。因为事件触发后,传输仍在进行。
如果发送端以较长的间隔发送字符,你可以用这种单字符触发的方式,同时,将 InputLen 也设置为 1。
否则,你应该将 RThreshold 设置为 20,将接收到的字节一次取回。
#5
楼主大概没有搞清楚用 MSCOMM 控件时,硬件和系统以及应用程序分别做些什么。
RThreshold = 1 只是告诉系统,当硬件和系统(统称底层)接收到 1 个字节的时候,通知应用程序来处理。这个时候,底层是在继续接收的。
#6
#1
没错,就是这样,它与硬件有关.如果你始终接收20字节,可设置RThreshold = 20
#2
关注 没听明白
#3
以下内容不权威,仅供参考
1、RThreshold=1设置了每接收到一个字符就产生一次 OnComm事件
2、上和条设置不代表你再读时接收缓存区内只有一个字符
3、楼主检查下你的程序中MSCOMM的InBufferSize是不是设置的太小,默认为1024
4、在接收中断中读接收缓冲区数据,最好用数组去读,这样才能读的全
1、RThreshold=1设置了每接收到一个字符就产生一次 OnComm事件
2、上和条设置不代表你再读时接收缓存区内只有一个字符
3、楼主检查下你的程序中MSCOMM的InBufferSize是不是设置的太小,默认为1024
4、在接收中断中读接收缓冲区数据,最好用数组去读,这样才能读的全
#4
“每接收到一个字节就会触发一次 OnComm 事件”是没有错的。但并不表示一个 OnComm 事件只能读取到一个字符。因为事件触发后,传输仍在进行。
如果发送端以较长的间隔发送字符,你可以用这种单字符触发的方式,同时,将 InputLen 也设置为 1。
否则,你应该将 RThreshold 设置为 20,将接收到的字节一次取回。
#5
楼主大概没有搞清楚用 MSCOMM 控件时,硬件和系统以及应用程序分别做些什么。
RThreshold = 1 只是告诉系统,当硬件和系统(统称底层)接收到 1 个字节的时候,通知应用程序来处理。这个时候,底层是在继续接收的。