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

在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...");
}


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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值