Mike.G

我有梦想,所以我在奋斗!-- I have a dream, so I struggle!

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


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

阅读更多
个人分类: cocos2d-x
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

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

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭