多线程串口通信的奇怪问题(主线程进行大数据量的操作会丢失部分串口返回的数据,否则一切正常),请高手帮忙!!!!!

bluesirius 2004-10-27 10:57:12
关于串口的实时通信程序,与串口的通信单独写在一个子线程中。通过SPCOMM与串口的单片机进行交互。在子线程中读取数据是采用定量分批读取。每次从串口读取一定量的数据放在缓冲区,处理完毕后,再次从串口读取,直到没有可以处理的数据。
在子线程运行过程中(即与串口通信中),如果主线程执行的操作用时不长或数据量不大时,串口通信很正常。子线程可以将所有数据读回,可是当主线程执行的操作用时长(如执行一个很长的循环)或数据量很大(从数据库中读取几千条记录)时,子线程就不能将所有的数据都读回。
  不能理解为什么会出现这样的情况,本人怀疑与内存或SPCOMM有关,可是这方面的知识匮乏,只好请教各位高手了.
...全文
187 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesirius 2004-11-02
  • 打赏
  • 举报
回复
谢谢各位!!
问题已经解决,问题出在了主线程对CPU时间片的占用时间太长。导致在一定时间内串口收不到单片机发送过来的数据,当这种情况出现在我向单片机发送命令而等待回应时,我就会以单片机没有收到命令码再次发送来处理,当我发送的命令码为清空交互数据的缓冲区时,则会清空还未处理的数据,造成数据丢失。现跟单片机程序开发组协商后,以解决这个问题。谢谢大家!
散分结贴!
aiirii 2004-10-27
  • 打赏
  • 举报
回复
設置 子线程 的優先級高一點了!!
KYSRH 2004-10-27
  • 打赏
  • 举报
回复
1.我怀疑是你设置的接收缓存区太小了,你把接收缓存区设置的大点试试.
2.你读取数据时处理数据为定量分批读取的方法可能有问题,试试实时的读取完全部串口数据再进行处理的方法.

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧