在开发聊天程序客户端的过程中,我碰到了一个问题:当运行客户端成后,打开任务管理器,显示程序未相应。我就想是什么原因导致我的程序未响应呢?是我的程序里面有bug?

我上网查了一下,有人说可能程序本身就有bug,有人说有可能程序里面有while无限循环。我的感觉是可能是第二种情况,因为我的程序里面为了和服务器进行连接,创建了绘画套接字,而因此从服务器recv数据,我们都知道recv在不进行任何设置的情况下是阻塞函数,它会一直等待对方发送的数据。而确实我有这样的一个句子,while(ERROR_SOCKET!=recv(....)),所以我想问题可能是出在这里吧。但是,我想在套接字编程里面必须要这样才能不停地接收对方传送过来的数据,再说我也看过有关套接字编程的例子程序,而那些程序怎么就没有说是“未响应”呢?

直觉告诉我,问题可能不在这里。然后我就想调用这个接收数据的函数是什么呢?一看,原来是MFC的消息相应函数,顺着这个东西我就想,程序未响应的最直接的表现就是:当程序运行起来以后,你再去点击UI界面,UI根本不响应你的任何输入操作。按照道理,windows程序会时时监控有什么外部操作,进而根据这些外部消息进行处理,现在不处理了,说明什么?并且我们知道消息处理是同步的,也就是说每一次只处理一个消息。我终于明白了,肯定是在消息处理函数中我调用了接收数据函数,而在这个函数中又调用了阻塞函数recv,recv一直处于阻塞等待状态,所以函数没有返回,消息处理函数也没有返回,所以windows不能再处理任何对UI的操作。

有这个问题我想到了本该很清楚的一个道理,那就是将UI与你的设计逻辑分开。确实是这样的,UI就是UI,它在处理完事件之后应该立即返回,除非是一些特殊的用法。这也是大部分项目中,有专门搞UI设计的,有专门搞逻辑设计的原因吧。

最后,处理我的这类问题的一个最简单的方法就是,创建一个接收数据的线程,有这个线程专门执行接受任务,这样消息处理在主线程中,就不会出现我的那种错误了。

socket服务器显示未响应,“程序未响应”的思考总结相关推荐

  1. socket服务器显示未响应,QTCPSOCKET 客户端已连接 而服务器无响应

    最近在使用qt coding一个项目时,使用到了qtcpsocket模块来编写客户端与服务器.在windows平台下还能正常工作,但是在ubuntu平台下,客户端提示已连接时,服务器却没有响应.经过排 ...

  2. 万国觉醒迁服务器显示该王国还未开放,万国觉醒的定点迁城怎么用?怎么获得定点迁城?...

    所谓的定点迁城区别于随机迁城,可直接把玩家的城市传送到一个指定坐标,此外也可利用定点迁城迁移到其他王国.本期万国觉醒的定点迁城怎么用攻略会将分为内部迁移和跨服迁移两种情况,并将阐述不同的使用方法. 第 ...

  3. 万国觉醒迁服务器显示该王国还未开放,万国觉醒怎么迁城到联盟其他王国

    万国觉醒迁城到联盟方法是游戏联盟玩法,玩家们想知道如何迁城搬家哦,那么万国觉醒怎么迁城到联盟其他王国.万国觉醒迁城玩法攻略呢,跑跑车手游网为大家带来了介绍. *万国觉醒怎么迁城到联盟其他王国? 迁城条 ...

  4. 万国觉醒迁服务器显示该王国还未开放,万国觉醒无法迁城怎么办 王国迁城条件及详细步骤...

    万国觉醒游戏中,我们是可以迁城到其他王国加入联盟的,不过一些小伙伴却发现自己迁不了城,万国觉醒无法迁城究竟是怎么回事呢,下面就来给大家详细介绍一下王国迁城条件以及具体步骤. [迁城条件] 1.主城的等 ...

  5. 什么是android应用程序未安装,Android 解决应用程序未安装的三种方法

    <Android 解决应用程序未安装的三种方法>由会员分享,可在线阅读,更多相关<Android 解决应用程序未安装的三种方法(3页珍藏版)>请在人人文库网上搜索. 1.解决安 ...

  6. 解决安卓应用程序未安装的三种方法

    一.很多人在Android2.2开启APP2SD之后如果安装程序时死机或者遇到其他情况,当再次安装程序会提示"应用程序未安装",从而安装程序失败. 解决方法: 储存模式连接电脑找到 ...

  7. 联盟不显示聊天服务器未响应,玩英雄联盟出现程序未响应是怎么回事

    英雄联盟的玩家许多,同时出现的问题也是大不相同,此次小编带给大家的是关于,玩英雄联盟经常出现程序未响应的相关解决方案,一起来看看吧! 玩英雄联盟经常出现程序未响应的解决方法: 1.首先检查网络,看看是 ...

  8. lol怎么英雄怎么聊天服务器未响应,玩英雄联盟出现程序未响应是怎么回事

    英雄联盟的玩家许多,同时出现的问题也是大不相同,此次小编带给大家的是关于,玩英雄联盟经常出现程序未响应的相关解决方案,一起来看看吧! 玩英雄联盟经常出现程序未响应的解决方法: 1.首先检查网络,看看是 ...

  9. dnf服务器未响应怎么解决方法,科技知识:DNF地下城与勇士程序未响应怎么办——一招搞定...

    很多DNF玩家在打开游戏时,游戏窗口一直没有反应,在排除电脑硬件配置的原因下,最有可能的原因就是设置出错了,下面小编就来为大家介绍一下解决办法.具体如下: 1. 首先,在桌面找到并点击"开始 ...

最新文章

  1. Android --- 微信支付时出现错误:错误的签名,验签失败,return_code=FAIL
  2. django-orm操作流程
  3. tomcat命令linux,Linux下一些操作Tomcat的命令
  4. Python机器学习方向企业面试题(三)
  5. 18. JavaScript event 对象
  6. 服务器硬盘数据备份到nas,群晖NAS教程第五节:如何备份 Synology NAS
  7. 机械公差与配合 常见问题
  8. tumblr_从iPhone或iPod Touch更新Tumblr博客
  9. 计算机excel取整函数,Excel取整公式集锦
  10. R语言Error in model.frame.default(formula = y ~ ., data = exam.data, drop.unused.levels = TRUE) :
  11. Excel如何制作下拉列表
  12. 软件模拟SPI接口程序代码
  13. 微信分享的各种大小限制
  14. 中蜂几月份自然分蜂_中蜂一年自然分蜂几次? | 蜂蜜网
  15. js获取随机色,也可以 指定获取 深色 or 浅色。
  16. 一些用过实用的软件工具和网站汇总
  17. 利用python语言实现多张图像拼接
  18. VirtualBox安装出现严重错误
  19. buuctf-misc-喵喵喵
  20. 武汉理工大学计算机学院专业排名,2019-2020武汉理工大学学科评估结果排名

热门文章

  1. cnn 一维时序数据_一时序数据输入维cnn
  2. js 设置 table 第一个 tr_华胜天成参与起草中国主导的第一个云计算国际技术报告...
  3. 开源自建/托管与商业化自研 Trace,如何选择?
  4. 国内唯一,阿里云挺进 Forrester 数据流分析报告“强劲表现者”象限
  5. PolarDB-X 2.0 全局 Binlog 和备份恢复能力解读
  6. 4条实用小建议,送给初入NLP领域的你
  7. 数据复盘《糖豆人》爆火营销过程:怎么做到以小博大?
  8. 为什么说Android才是游戏开发者的乐土?
  9. 游戏开发者需要注意的4个内存使用问题
  10. 在现代引擎游戏中使用正确的渲染打光流程