cocos2d-x中使用多线程--pthread

原创 2013年12月08日 12:53:50
在cocos2d-x中多线程一般是使用pthread,下面先来说一下pthread中比较常用的几个方法,后面再给出一个简单的创建多线程的例子。
创建一个线程:int pthread_create(pthread_t *restrict thread,
                                                  const pthread_attr_t *restrict_attr,
                                                  void *(*start_routine)(void *),
                                                  void *restrict arg);
参数thread指向保存线程ID的pthread_t结构。参数attr表示一个封装了线程的各种属性的属性对象,用来配置线程的运行,如果为NULL,则使新线程具有默认的属性。第三个参数start_routine是线程开始执行的时候调用的函数的名字。[void* start_routine(void *arg)]
返回的void指针将被pthread——join函数当作退出状态来处理。第四个参数arg正是传递给start_routine函数的参数。


int pthread_join(pthread_t thread, void **value_ptr);  使调用这个函数的线程等待指定的线程完成时在继续执行。thread为要等待的线程的id,参数value_ptr为指向返回值的指针提供一个位置,这个返回值是由目标线程传递给pthread_exit或return的。如果value_ptr为NULL,调用程序就不会对目标线程的状态进行检索了。  成功返回0,否则返回非0的错误代码。


void pthread_exit(void *value_ptr); 使调用该函数的线程终止。可以传递一个指针用来指向线程的返回值。


int pthread_cancle(pthread_t thread);  参数为要取消的线程的id,该函数不会阻塞调用线程。线程处于PTHREAD_CANCEL_ENABLE状态时才能够被取消. int pthread_setcancelstate(int state, int oldstate) 函数可以设置线程的取消状态。int pthread_setcanceltype(int type, int *oldtype) 设置线程的取消类型


获取互斥量
int pthread_mutex_lock(pthread_mutex_t *mutex);//使调用这个函数的线程一直阻塞直到互斥量可用为止
int pthread_mutex_trylock(pthread_mutex_t *mutex);//即时返回,如果互斥量空闲则得到它,否则返回EBUSY
释放互斥量
int pthread_mutex_unlock(pthread_mutex_t *mutex);//解锁
以上函数若成功返回0,否则返回非0的错误代码
 
在cocos2d-x中的使用:
我在一个新的cocos2d-x中添加一个按钮,然后每次点击这个按钮就创建一个新线程,让这个新线程打印一个输出,那就让他输出hello world吧~
创建一个cocos2d-x新工程,添加按钮,按钮的回调方法暂且就叫menuCallBack吧。
在menuCallBack中添加如下代码:
do {
      int errCode = 0;
      pthread_attr_t attr;
      errCode = pthread_attr_init(&attr);
            
      CC_BREAK_IF(errCode != 0);
            
      errCode = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
            
      if (errCode != 0) {
         pthread_attr_destroy(&attr);
         break;
      }
            
      errCode = pthread_create(&pid, &attr, check, NULL);
            
} while (0);


再添加一个static方法,shuchu:(注意:shuchu()一定是一个static方法)

void* shuchu(void *) {
          CCLOG("Hello World...");
}


这只是一个简单的创建线程的方法,另外线程之间是需要通信的,下次再讲线程之间的消息传递~

windows下pthread线程库的使用

一直以来,由于标准C++中没有纳入线程库,对于多线程的编程感到束手无策,win32的线程机制感觉用着不便。今天想搜索一下有没有其他线程库,想到了Unix下随处可见的pthread线程库,但是苦于这个库...
  • xiaojun111111
  • xiaojun111111
  • 2016年09月09日 23:35
  • 1071

pthread/Linux 简单多线程编程

POSIX线程(POSIX threads),简称pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中...
  • Always2015
  • Always2015
  • 2015年03月17日 22:22
  • 1861

【C/C++多线程编程之五】pthread线程深入理解

多线程编程之pthread线程深入理解       Pthread是 POSIX threads 的简称,是POSIX的线程标准。           前几篇博客已经能给你初步的多线程概念,...
  • Jiangweihll
  • Jiangweihll
  • 2014年04月25日 15:24
  • 7303

【Cocos2d-x】pthread库的使用

pthread库是一个跨平台的多线程库。在Cocos2d-x中已经集成了该库。 工程配置 1.包含头文件 $(ProjectDir)..\..\..\coco...
  • yixiao3660
  • yixiao3660
  • 2016年10月09日 18:48
  • 472

【C/C++多线程编程之三】创建pthread线程

多线程编程之创建pthread线程       Pthread是 POSIX threads 的简称,是POSIX的线程标准。           创建线程是多线程编程的第一步,理解线程创建...
  • Jiangweihll
  • Jiangweihll
  • 2014年04月15日 22:42
  • 7549

pthread多线程加速示例(大型矩阵乘法)

#include //#include #include "MatrixLib.h" #pragma comment(lib,"MatrixLib.lib") #pragma warning(di...
  • von_Ryan_Hack
  • von_Ryan_Hack
  • 2014年04月18日 23:02
  • 1378

使用pthread实现多线程CPU+GPU计算

本次测试目的仅仅为了尝试能否使用pthread实现多线程对CPU和GPU分别进行控制:   文件结构如下:   main.cc:控制线程的主函数   vector.cu:实现对核函数...
  • Allyli0022
  • Allyli0022
  • 2016年08月05日 17:33
  • 1296

【C/C++多线程编程之一】VC6.0安装pthread

C/C++多线程编程
  • Jiangweihll
  • Jiangweihll
  • 2014年04月14日 10:14
  • 9764

Pthread多线程同步的几种方式

本文来自博文: http://www.cnblogs.com/mydomain/archive/2011/08/14/2138455.html 线程的最大特点是资源的共享性,但资源共享中的...
  • Enter_
  • Enter_
  • 2014年06月21日 18:14
  • 3804

pthread + socket 实现多线程多客户端群聊服务器(简易)

原创作品,请勿转载。 /**************************************************** *pthread+socket 实现多线程 多客户端群聊系统(简易)...
  • u012997311
  • u012997311
  • 2017年05月24日 15:34
  • 402
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d-x中使用多线程--pthread
举报原因:
原因补充:

(最多只允许输入30个字)