关于串口的实时通信程序,与串口的通信单独写在一个子线程中。通过SPCOMM与串口的单片机进行交互。在子线程中读取数据是采用定量分批读取。每次从串口读取一定量的数据放在缓冲区,处理完毕后,再次从串口读取,直到没有可以处理的数据。
在子线程运行过程中(即与串口通信中),如果主线程执行的操作用时不长或数据量不大时,串口通信很正常。子线程可以将所有数据读回,可是当主线程执行的操作用时长(如执行一个很长的循环)或数据量很大(从数据库中读取几千条记录)时,子线程就不能将所有的数据都读回。
不能理解为什么会出现这样的情况,本人怀疑与内存或SPCOMM有关,可是这方面的知识匮乏,只好请教各位高手了。
在子线程运行过程中(即与串口通信中),如果主线程执行的操作用时不长或数据量不大时,串口通信很正常。子线程可以将所有数据读回,可是当主线程执行的操作用时长(如执行一个很长的循环)或数据量很大(从数据库中读取几千条记录)时,子线程就不能将所有的数据都读回。
不能理解为什么会出现这样的情况,本人怀疑与内存或SPCOMM有关,可是这方面的知识匮乏,只好请教各位高手了。
解决方案 »
- GGJJ,怎样将一个十六进制赋给一个byte 或者 word呀!请教!谢谢!
- 请问我要选一个数组型参数,在type libary里选哪个?谢谢!
- 圆形按钮问题
- WebBrowser1.Navigate(WideString('www.sohu.com'));怎麽會出錯、
- 1)双击stringgrid最上面一行fixedrows的分隔线时触发什么事件?2)单击stringgrid最上面一行fixedrows的Cells时触发什么事件?在线等待!
- 能不能控制菜单的位置?
- 关于Excel处理方面的问题!
- 使用socket传送文件时到accept时程序死掉了,大家帮忙看看哈
- 如何解决当按下TOOLBAR中的一个按钮就相当于按下一个特定的按键?
- Help急急急急急!!!!!!怎样得到另外一个可执行文件里"Button"的句柄?
- 多线程串口通信的奇怪问题(主线程进行大数据量的操作会丢失部分串口返回的数据,否则一切正常),请高手帮忙!!!!!
- 一个枚举格式的问题!
可能是缓冲区问题,或者是主线程占用CPU过高,导致子线程在串口缓冲区满时还不能读取数据。
这样看行不行,设置一个比较大的缓冲区,保证在一定时间内缓冲区不满,子线程将数据读取到缓冲区中(保留缓冲区写位置,循环写入),主线程负责处理数据,处理完数据后对缓冲区置位,并保存当前处理完了的缓冲区位置。
问题已经解决,问题出在了主线程对CPU时间片的占用时间太长。导致在一定时间内串口收不到单片机发送过来的数据,当这种情况出现在我向单片机发送命令而等待回应时,我就会以单片机没有收到命令码再次发送来处理,当我发送的命令码为清空交互数据的缓冲区时,则会清空还未处理的数据,造成数据丢失。现跟单片机程序开发组协商后,以解决这个问题。谢谢大家!
散分结贴!