基本上,只要是和网络挂上钩的话,就跑不了“线程”这个东西,今天写自己的项目也总算是用上了,其实也没什么难的,和其它操作系统的使用方式大同小异……
为什么说和网络挂上钩就跑不了“线程”呢,因为网络这东西其实是不稳定的,需要单独控制,并且,像我们在使用阻塞型功能时如:前面说的使用curl的基本使用方法中使用的代码,那就会造成界面卡住,甚至是假死……阻塞这东西的意思可以理解为“独占”,所以其它的资源什么的通通都得让道……这时候,线程的优势就体现出来了,我们把带有阻塞型功能的东西放进线程里控制,这样就不会干扰到其它功能的正常交互使用……
在cocos2d-x里有pthread这个东西,想要仔细了解的话直接百度,因此,这个东西和curl一样被定义在了第三方插件的文件目录下,在使用的时候也许会碰到无法引用的情况,像我就碰上了,设定包含目录也没用(菜鸟就是菜鸟啊……),所以直接把三个文件搬到工程class文件下,然后引用即可,也不要忘记加上需要引用的库文件pthreadVCE2.lib。
这章就只说说在cocos2d-x里最简单的线程使用方法:
首先当然就是要引用pthread.h了,然后下面是一个创建线程所需要的一些参数解释,当然,这里引用的是大虾们的东西:
PTW32_DLLPORT int PTW32_CDECL pthread_create (pthread_t * tid,//线程的标示
const pthread_attr_t * attr, //创建线程的参数
void *(*start) (void *), //入口函数的指针
void *arg); //传递给线程的数据
然后我们在.h中定义一个入口函数:
static void* HelloThread(void *r);
定义线程标识:
pthread_t tid
在cpp中让这个函数输出一个信息,当然,你也可以把前面用的网络链接代码给放进来:
void* HelloWorld::HelloThread(void* r)
{
CCLog("成功开启了一个线程");
return NULL;
}
最后只要调用创建线程的代码即可完成:
pthread_create(&tid,NULL,HelloThread,0);
执行代码后将会看到log里输出“成功开启一条线程”,至于多线程同步及通信的话,这东西太复杂,初学的菜鸟主要看下线程互斥锁就差不多了,这里就不再讲述这东西了,自己百度一下就差不多了……睡觉去!