c#SerialPort读取了接收缓冲里的值后还在吗?缓存里还有值吗

 我来答
ClaudeHye
推荐于2017-11-25 · TA获得超过249个赞
知道答主
回答量:71
采纳率:0%
帮助的人:23.4万
展开全部
接收缓冲区的内容不是接收端代码能控制的,你只能接受一次,之后就没有了。比如里边有10个bytes,你读了5个,那么还剩5个,你也只能按顺序读。
百度网友66a8d48e5
2013-04-29 · TA获得超过7687个赞
知道大有可为答主
回答量:3002
采纳率:12%
帮助的人:3891万
展开全部
所谓的缓冲区其实就是一系列的byte[]内存单元。

byte[] buffer = new byte[100];
//此时buffer中所有单元全是0.
int s = accept(buffer);、
假定s = 100;
则100人byte都是接收回来的值。
读取之后就buffer并没有发生变化。

s = accept(buffer);
假定s=50;
则前50个是新接收的数据。后50个是上次接收100个byte时的后50个数据,你取值的时间,只取前50个,否则你会取到后50个上次的数据。也就是说accept等写缓冲时,并没有将buffer进行清除,而是直接覆盖。所以还可以看到后50个的值。

但是SerialPort只是一个串口通信,与你所设定的缓冲区没有任何关系。所以读无还可以再读的。因为读缓冲区并没有清除缓冲区。

但有时,串口通信我们多采用双线程,写缓冲区与读缓部区各是一个线程。利用生产者——消费者模式,写完后,写线程被阻塞,只能去读,无法再实现写了。而读线程读完一程也被阻塞,只能等待写完后才能重新进读线程。

也就是说如果你自己采用了这种模块,无法在读两次的(线程阻塞了),但是如果不晕种模式,则本身是可以再次读到内容的——至于写线程是否正在写或写了一部分,那么你读的内容会有不中预知的变化的。所以才设计生产者与消费者模式。

但缓存区中是否有内容,与模式没有关系的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式