多线程串口通信问题

jacky_zuo 2007-02-05 07:37:06
我使用的是PCComm函数库,一台服务器与多台客户机通过串口传送数据,而且客户机随时通过串口想服务器发送实时状态数据,当客户机的指定目录下有文件时又会向服务器传送文件数据,实时状态数据与文件数据两者格式不一样。由于有多台客户机,所以我就在服务器端对于每个串口使用一个线程(不过线程的代码是完全一样的,参数不一样),但是运行时发现第一个线程运行得比较正常,后面的线程经常丢数据(由于传送文件数据时会有一个比较严格的校验过程,所以不会导致这样的丢数据),丢的数据一般都是前十条数据中的几条,后面的数据不丢。

我主要想请教各位:
1.为了防止过多的占用CPU我使用了Sleep函数,但是我感觉效果不好,很难控制,不知道什么样的函数才是最好的?
2.为什么会出现那样的丢数据情况,各位能不能给点意见看法?

多谢多谢!!!
...全文
410 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
renhaobin2000 2007-05-08
  • 打赏
  • 举报
回复
应该不会,每个串口都有自己的接收、发送缓存。即使当前没有及时接收,数据也会保存在缓存中!检查是不是线程锁的问题。
wanglovec 2007-04-24
  • 打赏
  • 举报
回复
感觉最主要的原因可能是你的服务器来不及,如果服务器是单CPU的话,同一时间,如果A线程在收数据,那么这时B的来了数据,所以 这时数据就丢了.



如果是这样的话,楼主可以用轮寻法.
sbkopoky 2007-02-17
  • 打赏
  • 举报
回复
有一个香港和悦网络电话的源文件 ,有兴趣妨进入我的BLOG看看
Waiting4you 2007-02-08
  • 打赏
  • 举报
回复
串口丢数据一般是使用"等待EV_RXCHAR事件然后读数据"这种方法, 解决方法是优化读取数据的速度,比如把读取来的数据先存在内存里,在其它时候再处理
fjye 2007-02-08
  • 打赏
  • 举报
回复
sleep会停止响应

最好是用Application->ProcessMessages();

自己写一个延迟函数,比如下面这个delay函数,代替sleep函数

bool delay(int dalaytime)
{
int starttime=GetTickCount();
while(GetTickCount()-starttime<=dalaytime)
{
Application->ProcessMessages();
}
}
harry_aaaa 2007-02-08
  • 打赏
  • 举报
回复
我也碰到类似的问题

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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