免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2638 | 回复: 8
打印 上一主题 下一主题

[C++] 一个linux tcp socket客户端的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-28 13:21 |只看该作者 |倒序浏览
本帖最后由 lzyshijune 于 2014-07-28 21:41 编辑

我写了一个客户端,主要有两个线程,UI线程和专管发送和接收的网络线程,UI线程不断把要发送的消息放到消息队列A,而网络线程则不断把消息队列A的消息发出去,同时把接收到的数据放到消息队列B,网络线程使用的是非阻塞socket。现在的问题是,UI线程把要发送的消息放到消息队列A之后就跑了做其他工作了,那么,当消息队列B有数据以后,也就是说,网络线程成功收到响应消息,并把响应消息放到消息队列B以后,怎么去通知UI线程去读返回的响应呢?

论坛徽章:
35
双子座
日期:2014-05-09 17:56:38程序设计版块每日发帖之星
日期:2015-08-30 06:20:00程序设计版块每日发帖之星
日期:2015-12-24 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-27 11:07:07程序设计版块每日发帖之星
日期:2016-01-12 06:20:0015-16赛季CBA联赛之北京
日期:2016-01-15 01:01:2115-16赛季CBA联赛之浙江
日期:2016-01-15 22:38:20程序设计版块每日发帖之星
日期:2016-01-18 06:20:00每日论坛发贴之星
日期:2016-01-18 06:20:0015-16赛季CBA联赛之北控
日期:2016-01-30 21:43:01程序设计版块每日发帖之星
日期:2016-02-08 06:20:0015-16赛季CBA联赛之山西
日期:2016-02-20 10:54:41
2 [报告]
发表于 2014-07-28 14:19 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
3 [报告]
发表于 2014-07-28 17:04 |只看该作者
回复 2# __BlueGuy_


   1. 响应和请求对应的问题可以用时间戳的方式解决;
   2.发信号的话,因为使用到了malloc ,如何解决malloc不可重入的问题?

论坛徽章:
35
双子座
日期:2014-05-09 17:56:38程序设计版块每日发帖之星
日期:2015-08-30 06:20:00程序设计版块每日发帖之星
日期:2015-12-24 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-27 11:07:07程序设计版块每日发帖之星
日期:2016-01-12 06:20:0015-16赛季CBA联赛之北京
日期:2016-01-15 01:01:2115-16赛季CBA联赛之浙江
日期:2016-01-15 22:38:20程序设计版块每日发帖之星
日期:2016-01-18 06:20:00每日论坛发贴之星
日期:2016-01-18 06:20:0015-16赛季CBA联赛之北控
日期:2016-01-30 21:43:01程序设计版块每日发帖之星
日期:2016-02-08 06:20:0015-16赛季CBA联赛之山西
日期:2016-02-20 10:54:41
4 [报告]
发表于 2014-07-28 19:04 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
5 [报告]
发表于 2014-07-28 21:39 |只看该作者
网络线程确实是用到了select轮询非阻塞的sockfd,看连接是否成功和有无数据读取啊。。但是其实现在真正的问题是另一个线程:ui线程如何知道什么时候去读取消息队列B中的数据呢??这个用select??怎么做呢??回复 4# __BlueGuy_


   

论坛徽章:
35
双子座
日期:2014-05-09 17:56:38程序设计版块每日发帖之星
日期:2015-08-30 06:20:00程序设计版块每日发帖之星
日期:2015-12-24 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-27 11:07:07程序设计版块每日发帖之星
日期:2016-01-12 06:20:0015-16赛季CBA联赛之北京
日期:2016-01-15 01:01:2115-16赛季CBA联赛之浙江
日期:2016-01-15 22:38:20程序设计版块每日发帖之星
日期:2016-01-18 06:20:00每日论坛发贴之星
日期:2016-01-18 06:20:0015-16赛季CBA联赛之北控
日期:2016-01-30 21:43:01程序设计版块每日发帖之星
日期:2016-02-08 06:20:0015-16赛季CBA联赛之山西
日期:2016-02-20 10:54:41
6 [报告]
发表于 2014-07-28 23:07 来自手机 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2014-07-29 14:21 |只看该作者
如果只有一个线程的话,UI就被阻塞在select上边了,这显然不是一个好的设计。要不然为什么单开一个网络线程呢??回复 6# __BlueGuy_


   

论坛徽章:
1
射手座
日期:2014-08-04 16:49:43
8 [报告]
发表于 2014-07-29 16:16 |只看该作者
POP  PUSH Semaphore

论坛徽章:
0
9 [报告]
发表于 2014-07-29 16:19 |只看该作者
您想要说什么呢??这些线程安全的东西当然知道,这不是问题,你再看下问题吧回复 8# hanzhenlll


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP