发布网友 发布时间:2022-04-12 14:31
共1个回答
热心网友 时间:2022-04-12 16:00
cocos2d-x中的多线程使用pthread就可以实现跨平台,而且也不是很难理解。使用pthread需要先配置一下工程。右击工程----->属性----->配置属性---->链接器----->输入---->附加依赖项中添加pthreadVCE2.lib,如下图
接着添加附加包含目录,右击项目,属性----->C/C++---->常规----->附加包含目录加入pthread头文件所在的目录
这样,环境就搭建起来了。
2.多线程的使用
使用pthread来实现多线程,最重要的一个函数是
PTW32_DLLPORT int PTW32_CDECL pthread_create (pthread_t * tid,//线程的标示
const pthread_attr_t * attr, //创建线程的参数
void *(*start) (void *), //入口函数的指针
void *arg); //传递给线程的数据
在HelloWorldScene.h文件中
pthread_t pidrun,pidgo;
static void* th_run(void *r);
static void* th_go(void *r);
定义了两个函数和两个线程的标识。
然后自定义了一个类,用于给线程传递数据。Student类如下:
#pragma once
#include <string>
class Student
{
public:
Student(void);
Student(std::string name,int age,std::string sex);
~Student(void);
std::string name;
int age;
std::string sex;
};
源文件如下
#include "Student.h"
#include "cocos2d.h"
Student::Student(void)
{
}
Student::~Student(void)
{
cocos2d::CCLog("delete data");
}
Student::Student(std::string name,int age,std::string sex)
{
this->name=name;
this->age=age;
this->sex=sex;
}
在退出菜单的回调函数中启动两个线程:
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
Student *temp=new Student(std::string("zhycheng"),23,std::string("male"));
pthread_mutex_init(&mutex,NULL);
pthread_create(&pidrun,NULL,th_run,temp);//启动线程
pthread_create(&pidgo,NULL,th_go,0);
}
可以看到,将Student的指针传递给了pidrun线程,那么在pidrun线程中获得Student信息如下:
Student *s=(Student*)(r);
CCLog("name is %s,and age is %d,sex is %s",s->name.c_str(),s->age,s->sex.c_str());
delete s;