windows编程socket问题

       今天调试了个MFC网络程序,被bug困扰了一天,终于在收工前解决了。

       大致是这样的,我们需要用上位机远程控制机器车前行。上位机上的MFC app的键盘按键响应如下:当按键按下时,系统会发送一个消息给app,当按键抬起时,系统会发送另一个消息给app。我们的项目是这样使用键盘按键的,当按下“向上”的方向键时,上位机通过socket给工控机发送一个前行命令,当抬起“向上”的方向键时,上位机通过socket给工控机发送一个前行停止的命令。结果当我们快速的“按下又抬起”向上按钮,机器人还在前进,需要再按下前进按钮,方能继续控制,这是一个相当严重的bug。起初,我们以为是windows的消息响应机制有问题,不允许快速的按下又抬起按键,否则它可能会忽略抬起的消息或者是把抬起的消息当成按下的消息处理了。后来发现,并不是这个问题,人的手按动速度再快丝毫不会影响windows的消息处理,cpu的执行速度是飞快的。最后,才发现问题出在这里,由于按下和抬起的消息响应函数里边都有网络发送函数send(这两个send属于同一个socket)。而按下和抬起速度太快的话,这两个send函数可能会出现问题或者会造成接收端的receive函数出问题,因此我们在“抬起”的消息响应函数中send调用前,加了半秒的延时,解决了错误。

posted @ 2014-05-07 17:34  Mr.doer  阅读(447)  评论(0编辑  收藏  举报