首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

多线程串口通信有关问题

2012-02-17 
多线程串口通信问题我使用的是PCComm函数库,一台服务器与多台客户机通过串口传送数据,而且客户机随时通过

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

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

多谢多谢!!!

[解决办法]
sleep会停止响应

最好是用Application-> ProcessMessages();

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

bool delay(int dalaytime)
{
int starttime=GetTickCount();
while(GetTickCount()-starttime <=dalaytime)
{
Application-> ProcessMessages();
}
}
[解决办法]
感觉最主要的原因可能是你的服务器来不及,如果服务器是单CPU的话,同一时间,如果A线程在收数据,那么这时B的来了数据,所以 这时数据就丢了.


如果是这样的话,楼主可以用轮寻法.
[解决办法]
应该不会,每个串口都有自己的接收、发送缓存。即使当前没有及时接收,数据也会保存在缓存中!检查是不是线程锁的问题。

热点排行