问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

cocos2d-x怎么开多线程?有没有跨平台第三方库

发布网友 发布时间: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;

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
叶罗丽精灵梦小游戏有吗? 女孩爱玩化妆换衣服的游戏 洋娃娃类似的游戏推荐 女生换装小游戏有哪些 哪一个换装游戏是古代的宫廷小花仙 女生换装小游戏有哪些 有没有比较好玩的纯古风换装单机游戏啊 父母走了,如何怀念? 如何在失去亲人后怀念他们呢? 父亲过世,如何怀念 U盘损坏数据恢复的有效方法使用专业工具和技巧来恢复U盘中的损坏... ...格式化的U盘中的数据文件简单有效的数据恢复方法和注意事项_百度知 ... 手机格式化恢复技巧教你简单有效地恢复误格式化的手机数据 梦幻西游新区五门五开大唐化生龙宫天宫无底洞 应该怎么加点刷任务 梦幻西游五开4普陀1天宫怎么加点? 梦幻西游五开的配置盘丝大唐地府天宫化生这样怎么加点 梦幻西游大唐天宫化生普陀龙宫5开怎么加点? 怎么打开xp笔记本的自带的麦克风 电脑主机WIN XP系统 新装麦克风用不了 怎么回事?应该怎么设置?什么地方我都试了,就是没有声音 怎么办? 在XP中如何打开麦克风? 梦幻西游五开 无底洞!普陀!地府!天宫!凌波成! 无底洞地府和普陀应该怎么加点!分别都加几点敏 windows-xp的系统,怎么打开它的麦克风功能? 59天宫怎么加点好? 梦幻西游4普陀1天宫五开怎么加点 5开地府、大唐、普陀、天宫、盘丝如何加点 自己五开 有个天宫 怎么加点 梦幻西游高等级5开的天宫怎么加点 梦幻西游5开的天宫怎么加点 梦幻西游五开天宫怎么加点 cocos如何新建python模板 姓冯男孩取什么名字高端大气有内涵 Call 是什么意思啊? 雅领注册过商标吗?还有哪些分类可以注册? 农历2013年正月十五日16:08出生 男孩 姓冯 取什么名字好?谢谢! 姓冯属龙的男孩取什么名字 阳历7月13下午4点26生的男孩取什么名字好?姓冯 cocos2dx移植Android平台 whats this in english是什么意思 what&#39;s this in English?怎么回答? What’s this in ( ) ? 什么this in English 八宝粥哪里特产? WHAT&#39;S THIS IN ENGLISH?是什么意思? What&#39;s this in English? 娃哈哈桂圆莲子八宝粥保质期是多少天? What`s this in E( ) It`s an a ( ) 娃哈哈桂圆莲子营养八宝粥的热量是多少? what&#39;s this in english?中的in等于to use吗? 娃哈哈桂圆莲子八宝粥每天吃两瓶 对身体好吗 with this in mind是什么意思 娃哈哈桂圆莲子营养八宝粥多少钱一箱?一瓶呢 What is this in English? 是什么意思? cocos2d网络游戏编程