教科书上说:进程是资源分配的最小单位,线程是CPU调度的最小单位。

进程是程序在计算机上的一次执行活动。直观的讲就是会产生一个pid。

int main()

{

    //业务逻辑代码

    return 0;

}

当进入main函数时就会创建一个进程。

线程是可执行代码的可分派单元。线程把一个进程分为很多片,每一片都可以是一个独立的流程。

为什么使用多线程和多进程:

为了实现并发执行,就是在同一时间同时执行多条任务。这样可以提高程序效率。

 

在cocos2d-x中使用多线程:

游戏中的界面体验很重要,最基本的条件就是流程性,并且在cocos2d开发的游戏中,每帧都要刷新一下界面,按60fps算,每秒刷新60次。所以可以把耗时的操作放到其他线程中,就不会对界面线程造成影响。

cocos2d-x 3.0系列版本使用了c++11,C++11提供了一个更好的用于线程操作的类std::thread,std::thread 在 <thread> 头文件中声明,因此使用 std::thread 时需要包含 <thread> 头文件。

std::thread 常用构造函数:

1、默认构造函数:thread()

  默认构造函数,创建一个空的 thread 执行对象

     std::thread t1;

2、初始化构造函数:template <class Fn, class... Args>

  初始化构造函数,创建一个 thread对象,该 thread对象可被 joinable,新产生的线程会调用 fn 函数,该函数的参数由 args 给出。

     std::thread t2(f1, 10);

常用函数:

1、get_id

   获取线程 ID。

2、joinable

   检查线程是否可被 join。

3、join

   Join 线程。待子线程执行完之后,主线程才可以继续执行下去,此时主线程会释放掉执行完后的子线程资源

4、detach

   Detach 线程

   将子线程从主线程里分离,子线程执行完成后会自己释放掉资源。分离后的线程,主线程将对它没有控制权了。


代码实操:

头文件:

  1. #ifndef __TestThread_SCENE_H__
  2. #define __TestThread_SCENE_H__
  3. #include "cocos2d.h"
  4. USING_NS_CC;
  5. class TestThread : public cocos2d::Layer
  6. {
  7. public:
  8. static cocos2d::Scene* createScene();
  9. virtual bool init();
  10. CREATE_FUNC(TestThread);
  11. Label *lblInit;
  12. void threadA(int first,std::string second);
  13. };
  14. #endif // __TestThread_SCENE_H__

源文件:

  1. #include "TestThread.h"
  2. #include <thread>
  3. Scene* TestThread::createScene()
  4. {
  5. auto scene = Scene::create();
  6. auto layer = TestThread::create();
  7. scene->addChild(layer);
  8. return scene;
  9. }
  10. bool TestThread::init()
  11. {
  12. if ( !Layer::init() )
  13. {
  14. return false;
  15. }
  16. Size size = Director::getInstance()->getVisibleSize();
  17. lblInit = Label::create("hi","Arial",24);
  18. addChild(lblInit);
  19. lblInit->setPosition(size/2);
  20. // 创建一个线程
  21. std::thread t1(&TestThread::threadA,this,10,"I am a string");
  22. // 分离线程
  23. t1.detach();
  24. lblInit->setString("main thread");
  25. return true;
  26. }
  27. void TestThread::threadA(int first,std::string second)
  28. {
  29. std::this_thread::sleep_for(std::chrono::seconds(3));
  30. lblInit->setString("threadA");
  31. log("threadA first = %d,second = %s",first,second.c_str());
  32. }

Cocos2d-X多线程(1) 在cocos2d-x中使用多线程的更多相关文章

  1. 多线程编程之二 ---MFC中的多线程开发

    下载源代码 五.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消 ...

  2. 【转】编程思想之多线程与多进程(3)——Java中的多线程

    <编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java中多线程程序的 ...

  3. Cocos2d-X多线程(4) 在子线程中进行网络请求

    新版本的android系统已经不允许在UI线程中进行网络请求了,必须新建一个线程. 代码实操: 头文件: #ifndef __TestThreadHttp_SCENE_H__ #define __Te ...

  4. [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)

    [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...

  5. 用最简单的方式在C#中使用多线程加速耗时的图像处理算法的执行(多核机器)。

    图像处理中,有很多算法由于其内在的复杂性是天然的耗时大户,加之图像本身蕴涵的数据量比一般的对象就大,因此,针对这类算法,执行速度的提在很大程度上依赖于硬件的性能,现在流行的CPU都是至少2核的,稍微好 ...

  6. 细说.NET 中的多线程 (一 概念)

    为什么使用多线程 使用户界面能够随时相应用户输入 当某个应用程序在进行大量运算时候,为了保证应用程序能够随时相应客户的输入,这个时候我们往往需要让大量运算和相应用户输入这两个行为在不同的线程中进行. ...

  7. 细说.NET中的多线程 (二 线程池)

    上一章我们了解到,由于线程的创建,销毁都是需要耗费大量资源和时间的,开发者应该非常节约的使用线程资源.最好的办法是使用线程池,线程池能够避免当前进行中大量的线程导致操作系统不停的进行线程切换,当线程数 ...

  8. [转载]ArcGIS Engine 中的多线程使用

    ArcGIS Engine 中的多线程使用 原文链接 http://anshien.blog.163.com/blog/static/169966308201082441114173/   一直都想写 ...

  9. 多线程技术在iOS开发中的使用

    进程和线程 要使用多线程,首先需要理解进程和线程这2个概念.这里我简单的说一下. 所谓进程对应的是一个应用程序,负责开辟内存空间供应用程序使用,但是进程不能执行任务(指令).一个进程至少包含一条线程, ...

随机推荐

  1. Redis 管道pipeline

    Redis是一个cs模式的tcp server,使用和http类似的请求响应协议. 一个client可以通过一个socket连接发起多个请求命令. 每个请求命令发出后client通常会阻塞并等待red ...

  2. <?xml version="1.0" encoding="UTF-8" ?>的意思

    <?xml version="1.0" encoding="UTF-8" ?> ?xml 这里是申明文件类型,这申明的是XML文件:version= ...

  3. 【leetcode】1262. Greatest Sum Divisible by Three

    题目如下: Given an array nums of integers, we need to find the maximum possible sum of elements of the a ...

  4. 什么是CSS 表单?

    ㈠输入框(input) 样式 ⑴使用 width 属性来设置输入框的宽度   示例:css部分:input { width: 100%; }                html部分:<for ...

  5. css动画速度与三次贝赛尔曲线

      今天要说的是css的动画曲线.   首先要说的是语法: value: 1.linear:线性动画,也就是匀速,以相同的速度开始以相同的速度结束. 2.ease:默认的动画效果,特点是先快后慢,时间 ...

  6. Python天天学_05_模块

    Python_day_05 金角大王: http://www.cnblogs.com/alex3714/articles/5161349.html ------Python是一个优雅的大姐姐 学习方式 ...

  7. Ubuntu下搜狗输入法乱码(二)

    本文适用于Ubuntu 16.04,造冰箱的大熊猫@cnblogs 2018/10/25 搜狗输入法时不时出现候选字乱码的问题.参照网上所说的修改Fcitx配置中的简体中文和繁体中文转换配置的方法,无 ...

  8. OCWA提高组模拟赛一 Solution

    Problem A RecMin 给出一个$n \times m$的矩阵,其中$1 \leq n,m \leq 3\ times 10^3$ 给出整数$a,b$,求出在矩阵中所有$a\ times b ...

  9. Scrapy学习(二)、安装及项目结构

    一.安装 1.安装pywin32,下载地址:https://sourceforge.net/projects/pywin32/files/pywin32/ 我选择的是Build 221,点进去,根据自 ...

  10. unittest详解(二) 跳过用例的执行(skip)

    在执行测试用例时,有时候有些用例是不需要执行的,那我们怎么办呢?难道删除这些用例?那下次执行时如果又需要执行这些用例时,又把它补回来?这样操作就太麻烦了. unittest提供了一些跳过指定用例的方法 ...