串口通讯 多线程
串口通信 多线程
用ReadFile()从串口源源不断接收到数据存到一个BYTE buffer[100]里,再从这个buffer逐字节提取进行加减,实时波形显示。
请问
1,需要用多线程实现吗
2,buffer总共只有100个字节的空间,但数据是源源不断从串口读出来送进buffer的,当100个字节全写满了,后面的数据怎么办,貌似写满100个字节是一瞬间的事情。从buffer逐字节提取数据,进行加减校验和波形输出,怎样提取,是buffer[0],buffer[1]...这样提吗?提取掉的数据要把它清空以便有空间可以接收后面读进来的数据吗
------解决方案--------------------
1:需要
2:(1)开更大的缓冲区
(2)动态分配一个缓冲区,当当前缓冲区满时,再分配,形成链表,然后处理。
------解决方案--------------------
数据量很大的话,最好多线程,数据量小的话,用不着多线程
------解决方案--------------------
搞两个乒乓似的内存,这个写完了交给读的去读,然后写第二个,写完了估计读的也差不多了,再相互交换
------解决方案--------------------
能不用多线程最好不用它, 这种情况可以考虑用队列方式解决
------解决方案--------------------
1,多线程是要的,一个往buffer里写一个往外读,两个线程,同时运行
2,buffer可以做一个循环buffer,每次读或者写之前判断一下,当buffer满了就不写,等待,等buffer里的数据被读出后有空间了再去写,同理,当读时buffer空,就等待,判断有了数据再去读,循环buffer的实现也很简单,最多200多行代码就实现了
------解决方案--------------------
如果LZ只是接收数据并不向外发送数据的话,不需要另外开辟新的线程!
不知道LZ具体是如何接受数据的,如果使用MSCOMM32控件的话,问题会变得很简单。 至于buffer[100]的容量问题根本就不是问题,收满之后将其清空不就完了吗?
用ReadFile()从串口源源不断接收到数据存到一个BYTE buffer[100]里,再从这个buffer逐字节提取进行加减,实时波形显示。
请问
1,需要用多线程实现吗
2,buffer总共只有100个字节的空间,但数据是源源不断从串口读出来送进buffer的,当100个字节全写满了,后面的数据怎么办,貌似写满100个字节是一瞬间的事情。从buffer逐字节提取数据,进行加减校验和波形输出,怎样提取,是buffer[0],buffer[1]...这样提吗?提取掉的数据要把它清空以便有空间可以接收后面读进来的数据吗
------解决方案--------------------
1:需要
2:(1)开更大的缓冲区
(2)动态分配一个缓冲区,当当前缓冲区满时,再分配,形成链表,然后处理。
------解决方案--------------------
数据量很大的话,最好多线程,数据量小的话,用不着多线程
------解决方案--------------------
搞两个乒乓似的内存,这个写完了交给读的去读,然后写第二个,写完了估计读的也差不多了,再相互交换
------解决方案--------------------
能不用多线程最好不用它, 这种情况可以考虑用队列方式解决
------解决方案--------------------
1,多线程是要的,一个往buffer里写一个往外读,两个线程,同时运行
2,buffer可以做一个循环buffer,每次读或者写之前判断一下,当buffer满了就不写,等待,等buffer里的数据被读出后有空间了再去写,同理,当读时buffer空,就等待,判断有了数据再去读,循环buffer的实现也很简单,最多200多行代码就实现了
------解决方案--------------------
如果LZ只是接收数据并不向外发送数据的话,不需要另外开辟新的线程!
不知道LZ具体是如何接受数据的,如果使用MSCOMM32控件的话,问题会变得很简单。 至于buffer[100]的容量问题根本就不是问题,收满之后将其清空不就完了吗?