上一篇博客中讲到用msg实现多线程之间的消息传递,因为我只是把网络接收的数据发给主线程,或者主线程有数据需要负责网络的子线程去发送,主程看了我的代码后说我是“杀鸡用了个宰牛的刀”,于是,我并没有使用msg,跨平台不太方便也是一方面的原因。

实现这个功能用STL也是可以的。非常简单,说一下做法,就不写具体的代码了,如果我说的不清楚请评论里留言啦~

假设是主线程要给子线程发送数据,创建一个全局的容器变量(至于用vector还是list或者deque啊就自行决定吧),如果有数据要发送了就把它存到容器中,在子线程中需要一个while(true)的循环,一直去读这个容器中有没有数据,有就读出来(注意要把数据取出来),没有就继续循环。特别强调的是不论是主线程还是子线程对容器的访问都是要加锁的。我暂时是这么实现的~

如果是子线程给主线程发消息就不能使用while(true)了,否则UI显示会在while循环里卡住的,我的实现是子线程用notificationcenter给主线程发送一个消息,然后主线程从容器中读取数据。

也向王哲大神请教过线程通信这个问题,下面贴出他给出的建议

多线程方面的消息传递方面,目前cocos没有封装这块。你可以参考标准的“生产者-消费者模型”来实现。网上可以搜到很多实现。另外,我在2.x版本里面的写的 https://github.com/cocos2d/cocos2d-x/blob/master/extensions/network/HttpClient.cpp 这个也可以参考一下,没有做很纯粹的封装,不过用 CCArray 做了两个队列,在网络和UI线程里面分别用pthread_mutex_lock/unlock 加锁解锁。

cocos2d-x线程通信STL相关推荐

  1. ZeroMq实现跨线程通信

    ZeroMq实现跨线程通信 之前在技术崇拜的技术经理指导下阅读了ZeroMq的基础代码,现在就将阅读的心得与成果记录一下,并重新模仿实现了一下经理的异步队列. 1.对外接口 //主要接口(1)void ...

  2. python 线程锁 共享全局变量 线程通信

    python 线程锁 共享全局变量 线程通信 注意:全局变量不必做为参数传到函数里!!! import threading # 银行存钱和取钱 # 存钱1万次 def add():global mon ...

  3. C++多线程:Linux 线程通信,唤醒,互斥锁(未完待续)

    c++ multi thread message sending and notify 线程通信常用的方法有共享内存和消息传递,推荐使用消息传递. 最常用的就是管道了,可以使用匿名管道或者命名管道. ...

  4. Python网络编程(线程通信、GIL、服务器模型)

    什么是进程.进程的概念? 进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间, 一般情况下,包括文本区域(text region).数据区域(data region)和堆栈( ...

  5. 多线程总结五:线程通信(一)

    当线程在程序中运行时,线程的调度具有一定的透明性,程序通常无法准确控制线程的轮换执行,Java提供了一些机制来保证线程协调运行. 1.传统的线程通信借助Object类提供的wait().notify( ...

  6. android 36 线程通信

    安卓中一个程序跑起来叫进程,进程中至少有一个主线程.主线程用于处理用户的触摸操作和将触摸操作事件分发给响应的控件.如果进行消耗时间操作,下载,磁盘读取文件,不润许在主线程操作,只能在工作线程操作.主线 ...

  7. 线程通信问题--生产者和消费者问题

    一.问题引入:首先实现一个线程通信的实例,使用两个线程交替打印输出100以内的数字. 代码实现如下: 1 package com.baozi.exer; 2 3 public class Commun ...

  8. 同软件多个线程设置不同ip_5-13网络编程(附带多线程死锁,线程通信)

    0513多线程 死锁 当线程任务中出现了多个同步(多个锁)时,如果同步中嵌套了其他的同步.这时容易引发一种现象:程序出现无限等待,这种现象我们称为死锁 线程通信 生产者消费者模式 模拟街道案例 wai ...

  9. 并发编程线程通信之管道流

    前言 在并发编程中,需要处理两个问题:线程之间如何通信及线程之间如何同步.通知是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递. 在共享内存的并发模型里, ...

最新文章

  1. git 换行符LF与CRLF转换问题
  2. C++通过hiredis连接到redis
  3. mysql 修改表 引擎,mysql如何修改表类型(表引擎)
  4. java并发-多线程方面的思考
  5. 两个文本框异动任何一个能即时更新计算结果
  6. maven的安装以及配置--第一章
  7. H5商城与小程序商城哪个好_应该怎么选择_OctShop
  8. WEB基础之:创建表格
  9. 为什么要了解计算机发展史,计算机发展史给我的启示
  10. 用GetGlyphOutline搞字模
  11. 投屏类H5应用开发分析
  12. Volkswagen profit roars back two yea iot L?sungen rs after 'dieselgate'
  13. TCP/IP四层模型与OSI七层参考模型(网络协议)
  14. Mac OS 使用命令(scp/sftp)将本地文件上传到远程 Linux 服务器主机或者从远程主机下载文件到本地主机
  15. 坚持#第108天~生死看淡,不服就干!
  16. 自动切换背景的登录页面
  17. 关于软件可测试性的资料
  18. ABB断路器维修F1F2F3E1E2E3E4系列E6H6300
  19. ClipDrawable资源的使用实例
  20. 在你的对话框上查看Revit模型的各个视图

热门文章

  1. 麦咖啡跨界多芬推出泡泡拿铁、咖啡味泡泡洗护系列
  2. 杜克计算机工程本科专业申请,Duke-C同学斩获2015 杜克大学 计算机工程硕士Offer一枚...
  3. win10打不开gpedit.msc的解决方法
  4. 算法学习笔记五:最短路径
  5. 狂风暴雨——雨过天晴篇:数据流层发布
  6. 【第72期】游戏策划:回复@小凡重返毕业前1年,想做什么?
  7. 怎么退出python
  8. 红帽linux更新资源库,如何用APT维护红帽企业版Linux
  9. windows仍在设置此类设备的类配置,代码56
  10. 如何给你的网站接入第三方支付功能