程序丨超简单!在虚幻引擎4中使用C++实现多线程
翻译:王成林 ( 麦克斯韦的麦斯威尔 )
审校:黄秀美(厚德载物)
在本文中我将为你展示在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-沫沫↓
点击“阅读原文”
查看评论 回复