关闭

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

标签: cocos2d-xpthread多线程
1747人阅读 评论(0) 收藏 举报
分类:
在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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34766次
    • 积分:530
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论