多线程串口通信问题
我使用的是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的来了数据,所以 这时数据就丢了.
如果是这样的话,楼主可以用轮寻法.
[解决办法]
应该不会,每个串口都有自己的接收、发送缓存。即使当前没有及时接收,数据也会保存在缓存中!检查是不是线程锁的问题。