您现在的位置: 主页 > 嵌入式软件 > C/C++ > 程序丨超简单!在虚幻引擎4中使用C++实现多线程
本文所属标签:
为本文创立个标签吧:

程序丨超简单!在虚幻引擎4中使用C++实现多线程

来源:网络整理 网络用户发布,如有版权联系网管删除 2018-09-04 

翻译:王成林 ( 麦克斯韦的麦斯威尔 )

审校:黄秀美(厚德载物)

  

  在本文中我将为你展示在UE4中使用C++实现多线程有多么的容易。直接援引维基百科相关页面的介绍,多线程是一个CPU同时处理多个进程或线程的能力。

  现代软件应用被设计为可以在任何时间下都能通知用户它们的状态。例如,如果一个应用在某处卡住了,它极有可能显示一条相应的指示(例如一个进度条或者一个载入环)。一个应用的逻辑通常被分为两个(或多个)线程。主线程永远负责应用的UI,因为它可以显示或隐藏所有进度指示,而其它线程在“背景”中运行它们的逻辑。

  因为软件应用中的主线程负责UI,你可以将虚幻引擎4中主线程的功能理解为负责渲染画面。基于这点,我们将它称作游戏线程。

  如果你要在游戏线程中进行繁重的运算,你的游戏很有可能会卡死(取决于你的PC以及你进行的运算)。在本文中,我将建立一个简单的函数,它能够寻找前N个质数(N在Editor进行设置)。另外,我创建了两个输入事件一个在游戏线程中调用该函数,另一个在一个不同的线程中调用该函数。

  在我们开始前,先看看最终结果:

  

  建立你的项目

  在本教程中我使用的是第三人称C++项目模板。在角色的头文件中我加入了以下代码:

  

  然后在角色类的头文件中,在角色类的声明和实现的后面我加入了以下命名空间,它包含了实际进行计算的函数:

  

  后面我们将在角色的头文件中(注意不是在角色类中)加入更多的类。我们刚刚声明了一个包含静态函数CalculatePrimeNumbers的命名空间,这样就能从不同的代码类中使用同一个函数了。

  这是CalculatePrimeNumbers函数的实现:

  

  为CalculatePrimeNumbersAsync函数添加一个空的实现然后编译并保存你的代码。然后如下图所示,在蓝图中设置两个按键绑定:

  

  创建一个任务

  当提及多线程时,你会听见很多关于任务(Task)的内容。简单来说,一个任务就是一段可以在任意线程上运行的代码。我们将创建一个新的类,它将在另外一个线程中执行CalculatePrimeNumbers函数。

  为了添加该类,我们不需要像平常那样通过UE4编辑器添加一个C++类。我们将手动添加我们的类!

  那么这一次我们将继承哪个类呢?嗯,我们需要一个内置了创建和使用任务功能的类。我已经搜索了引擎的源代码并且找到了所需的类,所以你不用担心!

  紧接着你的命名空间的声明,添加以下类:

  

  添加完以上代码后,在CalculatePrimeNumbersAsync中加入以下实现:

  

  编译并测试你的代码!别忘了通过编辑器调整MaxPrime变量以得到和上面视频中相似的结果!

  如果你凌乱了……这是我的角色类头文件的全部内容:

  

  

  

  PS:如果你想更加详细地了解UE4中的多线程功能,我建议你仔细钻研引擎源代码中的AsyncWork.h文件。

  【版权声明】

  原文作者未做权利声明,视为共享知识产权进入公共领域,自动获得授权。

  点击一下

  立即阅读近期热文

怎么用Unity3D设计一个AAA级游戏?

想让你的游戏运行速度快10倍?你要这样做!

EA总监分享《星球大战:银河英雄传》开发技巧

……

添加小编微信,发送“程序可享双重福利

1.加入GAD程序猿交流基地

获取行业干货资讯

观看大牛分享直播

2.直接领取60G独家程序资料库

内含

腾讯内部分享、文章教程、视频教程等

全套资料

↓长按添加小编GAD-沫沫

  点击“阅读原文”



              查看评论 回复



嵌入式交流网主页 > 嵌入式软件 > C/C++ > 程序丨超简单!在虚幻引擎4中使用C++实现多线程
 线程 一个 函数

"程序丨超简单!在虚幻引擎4中使用C++实现多线程"的相关文章

网站地图

围观()