Cocos2d-x——pthread的使用注意事項

1:多線程所調用的成員方法定義爲static。多線程

2:互斥鎖(pthread_mutex_t)定義在cpp文件的開頭,而且也定義爲static。線程

3:pthread_mutex_init方法儘可能在最先的時候進行調用初始化(絕對不要在初始化以後當即開始新線程,不然pthread_mutex_lock極可能會返回22的錯誤,由於此時互斥量尚未初始化完成)。it

4:pthread_mutex_destroy方法儘可能在最晚的匹配的時候調用(好比構造析構——配對)。thread

 

代碼:方法

頭文件static

public:
pthread_t tid1;
pthread_t tid2;文件

static void* anotherTest1(void* args);
static void* anotherTest2(void* args);錯誤

類文件:return

static pthread_mutex_t mylock1;void

HelloWorld::HelloWorld()
{
  pthread_mutex_init(&mylock1, NULL);
}

HelloWorld::~HelloWorld()
{
  pthread_mutex_destroy(&mylock1);
}

void* HelloWorld::anotherTest1(void* args)
{
  int intResult1 = pthread_mutex_lock(&mylock1);
  CCLOG("Result1:%d", intResult1);

  for(int i=0;i<=10; i++) {
    CCLOG("1-%d",i);
    //sleep(1);
  }

  pthread_mutex_unlock(&mylock1);
  return NULL;
}

void* HelloWorld::anotherTest2(void* args)
{
  int intResult2 = pthread_mutex_lock(&mylock1);
  CCLOG("Result2:%d", intResult2);

  for(int j=0;j<=10; j++) {
    CCLOG("2-%d",j);
    //sleep(1);
  }

pthread_mutex_unlock(&mylock1);
  return NULL;
}

void HelloWorld::menuStartNewThread(CCObject* pSender){   pthread_create(&tid1, NULL, anotherTest1, NULL);   pthread_create(&tid2, NULL, anotherTest2, NULL);}

相關文章
相關標籤/搜索