cocos2dx2.0 与cocos2dx3.1 创建线程不同方式总结
来源:互联网 发布:js中bind方法 编辑:程序博客网 时间:2024/05/22 12:17
虽然内容是抄过来的,但是经过了我的验证,而且放在一起就清楚很多了,cocos2dx版本经常变化很大,总会导致这样那样的问题。
cocos2dx2.0 中
1. 头文件
#include <pthread.h>... pthread_t serial_thread_id; // 起这个名字本打算用在socket上的 int serialThreadStart(void);// 启动线程的方法 static void* serialReceiverFun(void *arg);// 被启动的线程函数,注意必须是静态方法...
2.cpp文件
...int HelloWorld::serialThreadStart(){ int errCode=0; do { pthread_attr_t tAttr; errCode=pthread_attr_init(&tAttr); CC_BREAK_IF(errCode!=0); errCode=pthread_attr_setdetachstate(&tAttr, PTHREAD_CREATE_DETACHED); if(errCode!=0) { pthread_attr_destroy(&tAttr); break; } errCode=pthread_create(&serial_thread_id, &tAttr, serialReceiverFun, this); CCLOGERROR("serial_thread_id=%d\n",&serial_thread_id); } while (0); return errCode;}void* HelloWorld::serialReceiverFun(void *arg){ CCLOGERROR("serial thread start"); while(true) { char buff[BUFSIZE]={0}; int readSize = 0; readSize = receiverDate(buff,BUFSIZE); if(readSize > 0) { CCLOGERROR("readSize=%d,%s\n",readSize,buff); sendDate(buff,readSize); } } return NULL;}...
3. 开启线程
this->serialThreadStart();
cocos2dx3.1 创建线程
在cocos2dx 2.0时代,我们使用的是pthread库,是一套用户级线程库,被广泛地使用在跨平台应用上。但在cocos2dx 3.0中并未发现有pthread的支持文件,原来c++11中已经拥有了一个更好用的用于线程操作的类std::thread。cocos2dx 3.0的版本默认是在vs2012版本,支持c++11的新特性,使用std::thread来创建线程简直方便。
#include <thread>...bool HelloWorld::init(){ if ( !Layer::init() ) { return false; } std::thread t1(&HelloWorld::myThread,this);//创建一个分支线程,回调到myThread函数里// t1.join();t1.detach(); CCLOG("in major thread");//在主线程 return true;}void HelloWorld::myThread(){ CCLOG("in my thread");}
t.join()等待子线程myThread执行完之后,主线程才可以继续执行下去,此时主线程会释放掉执行完后的子线程资源。从上面的图片也可以看出,是先输出"in my thread",再输出"in major thread"。
当然了,如果不想等待子线程,可以在主线程里面执行t1.detach()将子线程从主线程里分离,子线程执行完成后会自己释放掉资源。分离后的线程,主线程将对它没有控制权了。
当然了,如果不想等待子线程,可以在主线程里面执行t1.detach()将子线程从主线程里分离,子线程执行完成后会自己释放掉资源。分离后的线程,主线程将对它没有控制权了。
当然了,也可以往线程函数里穿参数,这里用到了bind。下面例子在实例化线程对象的时候,在线程函数myThread后面紧接着传入两个参数。
#include <thread>bool HelloWorld::init(){ if ( !Layer::init() ) { return false; } std::thread t1(&HelloWorld::myThread,this,10,20);//创建一个分支线程,回调到myThread函数里 //t1.join(); t1.detach(); CCLOG("in major thread");//在主线程 return true;}void HelloWorld::myThread(int first,int second){ CCLOG("in my thread,first = %d,second = %d",first,second);}bool HelloWorld::init(){ if ( !Layer::init() ) { return false; } std::thread t1(&HelloWorld::myThread,this,10,20);//创建一个分支线程,回调到myThread函数里 //t1.join(); t1.detach(); CCLOG("in major thread");//在主线程 return true;}void HelloWorld::myThread(int first,int second){ CCLOG("in my thread,first = %d,second = %d",first,second);}
2 0
- cocos2dx2.0 与cocos2dx3.1 创建线程不同方式总结
- cocos2dx2.x 与cocos2dx3.x创建线程不同方式总结
- cocos2dx2.0 ----- cocos2dx3.0
- cocos2dx2.2 cocos2dx3.1 用命令创建多平台项目
- 创建线程有几种不同的方式?
- boost线程创建方式总结
- cocos2dx2.0以上创建新项目的方法
- cocos2dx3.0项目创建流程
- cocos2dx3.1 + VS2013创建工程
- boost::thread线程创建方式总结
- boost::thread线程创建方式总结
- boost::thread线程创建方式总结
- boost::thread线程创建方式总结
- boost::thread线程创建方式总结
- boost::thread线程创建方式总结
- 总结几种创建线程的方式
- boost::thread线程创建方式总结
- 创建线程的三种方式总结
- MySql存储过程总结
- MA均线指标详解、价托、量托
- 使用 circular-progress-button 实现环形进度按钮
- 微信的分享功能(针对web手机站页面进行的分享功能)
- mysql查询今天,昨天,近7天,近30天,本月,上一月数据方法
- cocos2dx2.0 与cocos2dx3.1 创建线程不同方式总结
- sql之select语句
- 网络安全五要素
- 挂载yaffs文件系统时参数的配置
- iOS系统网络抓包方法
- Android开源项目第一篇——个性化控件(View)篇
- .NET问题集锦
- C++ 常用类 string类
- Adobe/Flash Media Server 5.0 使用配置文件