cocos2dx2.0 与cocos2dx3.1 创建线程不同方式总结
尽管内容是抄过来的。可是经过了我的验证。并且放在一起就清楚非常多了,cocos2dx版本号常常变化非常大。总会导致这样那样的问题。
#include <pthread.h>
... pthread_t serial_thread_id; // 起这个名字本打算用在socket上的
int serialThreadStart(void);// 启动线程的方法
static void* serialReceiverFun(void *arg);// 被启动的线程函数,注意必须是静态方法
...
...
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;
}
...
this->serialThreadStart();
但在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");
}
my thread",再输出"in major thread"。
当然了,假设不想等待子线程,能够在主线程里面运行t1.detach()将子线程从主线程里分离,子线程运行完毕后会自己释放掉资源。
分离后的线程,主线程将对它没有控制权了。
以下样例在实例化线程对象的时候,在线程函数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);
}
cocos2dx2.0 与cocos2dx3.1 创建线程不同方式总结的更多相关文章
- 创建线程的方式三:实现Callable接口-----JDK5.0 新增
package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...
- 创建线程的方式三:实现Callable接口 --- JDK 5.0新增
/** * 创建线程的方式三:实现Callable接口. --- JDK 5.0新增 * * * 如何理解实现Callable接口的方式创建多线程比实现Runnable接口创建多线程方式强大? * 1 ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- Java多线程学习总结--线程概述及创建线程的方式(1)
在Java开发中,多线程是很常用的,用得好的话,可以提高程序的性能. 首先先来看一下线程和进程的区别: 1,一个应用程序就是一个进程,一个进程中有一个或多个线程.一个进程至少要有一个主线程.线程可以看 ...
- 7. Callable 创建线程的方式三
package com.gf.demo06; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionEx ...
- java线程(1)——三种创建线程的方式
前言 线程,英文Thread.在java中,创建线程的方式有三种: 1.Thread 2.Runnable 3.Callable 在详细介绍下这几种方式之前,我们先来看下Thread类和Runnabl ...
- java线程——三种创建线程的方式
前言 线程,英文Thread.在java中,创建线程的方式有三种: 1.Thread 2.Runnable 3.Callable 在详细介绍下这几种方式之前,我们先来看下Thread类和Runnabl ...
- java中创建线程的方式
创建线程的方式: 继承thread 实现runnable 线程池 FurureTask/Callable 第一种:继承thread demo1: public class demo1 { public ...
- Java之创建线程的方式四:使用线程池
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.c ...
随机推荐
- 2019-03-19 SQL Server简单存储过程的创建 删除 执行
--创建名为 Get 的有输入参数的存储过程 create proc Get --设置默认值 @TrustId int ='001' as begin select * from [DealStruc ...
- word上怎么打钩
原文:http://www.wordlm.com/html/2291.html 有时我们在Word中制作一份特殊的表格时,可能会用到这样一些特殊符号,“在方框里打钩”或打叉.这些符号虽看起来简单不起眼 ...
- HDU 1350 Taxi Cab Scheme
Taxi Cab Scheme Time Limit: 10000ms Memory Limit: 32768KB This problem will be judged on HDU. Origin ...
- myeclipse导入工程 Some projects cannot be imported because they already exist in the workspace
问题描述: 1 第一次从外部导入工程或者新建工程,成功: 2 删除该工程,但是没有选择delete project contents on disk 3 再次需要该工程,导入该工程时出现警告:Some ...
- 关于C++的一些函数的使用方法
关于C++的一些函数的使用方法: http://www.shouce.ren/api/c/index.html
- [ReactVR] Render Custom 3D Objects Using the Model Component in React VR
React VR isn't limited to simple 3D primitives. By using the <Model/> Component we can place a ...
- pintos操作系统thread部分的实现
pintos是斯坦福大学自己开发的一个教学用操作系统.里面的代码给我们留了很多坑.我们的目标就是解决这些坑!详细的实现大家能够看看这篇blog,尽管我的代码并非所有跟着他写的,可是这确实是一篇非常好地 ...
- phonegap(cordova) 自己定义插件代码篇(六)----android ,iOS 微信支付工具整合
还是那句话,在使用插件代码篇的时候,请先了解插件机制(如整合原生插件先阅读原生插件文档.非常重要.非常重要!非常重要!),如未了解,请先阅读入门篇.这里就专贴关键代码 必须先把官方sdk 依照要求一步 ...
- 千万别相信鲁大师的硬件測温柔CPU測温功能!!
非常多人本来随手安装的一个软件. 相信也信任得过它 . 这下让我測试对它失望了.没想到鲁大师这个測温功能实在太搓了!! 白白浪费了我一晚上, 搞来了硅胶 ,弄了几遍 , 还是一样, 还以为买了水货 ...
- 一个人的旅行 HDU杭电2066【dijkstra算法 || SPFA】
pid=2066">http://acm.hdu.edu.cn/showproblem.php? pid=2066 Problem Description 尽管草儿是个路痴(就是在杭电 ...