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

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

windows编程socket问题的更多相关文章

  1. windows编程-socket

    server部分 ,Initialize Winsock. ,Create a socket. ,Bind the socket. ,Listen on the socket for a client ...

  2. 操作系统,windows编程,网络,socket

    首发:个人博客,更新&纠错&回复 之前关于c/s的一篇博文只记了思路没记代码,而且表达不清晰,事后看不知所云,这个习惯要改. 这十几天学了点关于操作系统.windows编程和网络,主要 ...

  3. 《Windows编程零基础学》第零节

    首先很开心申请到了这一个专栏<Windows编程零基础学> 这是第一篇文章,在这里,我将讲述一些基础的知识. 什么是Windows编程 所谓Windows编程就是在Windows平台上开发 ...

  4. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  5. Windows编程

    本文整理自百科.知乎与 科学家的世界 问题一:为什么开发windows应用程序不用c 而用.net,java,c++? 用 c+windows API  开发windows 应用程序  比用.net, ...

  6. 【Windows编程】系列第六篇:创建Toolbar与Statusbar

    上一篇我们学习了解了如何使用Windows GDI画图,该应用程序都是光光的静态窗口,我们使用Windows应用程序,但凡稍微复杂一点的程序都会有工具栏和状态栏,工具栏主要用于一些快捷功能按钮.比如典 ...

  7. 【Windows编程】系列第十一篇:多文档界面框架

    前面我们所举的例子中都是单文档界面框架,也就是说这个窗口里面的客户区就是一个文档界面,可以编写程序在里面输入或者绘制文本和图形输出,但是不能有出现多个文档的情况.比如下面的UltraEdit就是一个典 ...

  8. 【Windows编程】系列第十篇:文本插入符

    大家知道,在使用微软的编程环境创建工程时会让你选择是控制台模式还是Windows应用程序.如果选择控制台的console模式,就会在运行时出现一个黑洞洞的字符模式窗口,里面就有等待输入一闪一闪的插入符 ...

  9. 【Windows编程】系列第八篇:通用对话框

    上一篇我们学习了菜单的基本编程,本篇来了解一下通用对话框的使用.Windows系统之所以是目前最流行的桌面系统,也是因为Windows有一套标准化,统一友好的交互界面,比如菜单.工具栏.状态栏以及各个 ...

随机推荐

  1. 移植FreeModbus+ModbusMaster+STM32至RT-Thread(初步)

    一.项目描述 目前操作系统在嵌入式软件行业非常流行,在工控组网方面,以后可能会经常使用到Modbus主机+操作系统.Modbus从机+操作系统甚至Modbus主机+Modbus从机+操作系统.但是操作 ...

  2. java虚拟机JVM学习笔记-基础知识

    最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--java虚拟机 媒介:JVM是每一位从事Java开发工程师必须翻越的一座大山! JVM(Java Virtual Machine)JRE ...

  3. JQuery Basic Features Quick Walkthrough

    1. Basic Selectors $('p')—Accesses all the paragraph elements in the HTML file $('div')—Accesses all ...

  4. php openssl 生成公私钥,根据网上文章整理的

    linux下没有问题,win下有报错 <?php$configargs = array("config" => "/usr/local/php/ext/ope ...

  5. STL中heap算法(堆算法)

     ①push_heap算法 以下是push_heap算法的实现细节.该函数接收两个迭代器,用来表现一个heap底部容器(vector)的头尾,而且新元素已经插入究竟部的最尾端. template ...

  6. curl要注意的几点

    1.post提交数据 $postData = array( 'paramCity' => array(array('id' => $city_id, 'day' => $city_d ...

  7. Word2010 清除样式

    使用场景         有时候我们在网页上面粘贴一些精华文章或者从去整理别人已经完成的word的时候,会发现它自带的格式,可能并不是我们所理想的格式,所以此时就不得不去重新编辑其格式,但是word里 ...

  8. px,em,rem的区别

    PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位: 3. Firefox能够调整px和em,rem,但是96%以上 ...

  9. 关于dispatchTouchEvent, onInterceptTouchEvent, onTouchEvent的分发机制浅析

    虽说这个问题不是很难...动动手就能看出答案...但是似乎不太容易理解...几次尝试把这个问题说明白....但是好像感觉说不明白....(顿时想起了那句话----说不明白就是自己还不明白! 我怎么可能 ...

  10. 简化LINUX的命令输入 简化linux命令

    在LINUX中,有很多常用的命令,常用的命令我们可以熟练的记忆,但是对于不经常使用的命令恐怕是需要翻阅手册了,但是我们可以简化这些命令的输入来达到简便记忆的效果. 这里以BSH为例: 编辑/etc/b ...