Unreal Engine 4 —— 多线程任务C++构建
发表于2017-02-17
C++ 多线程是多任务处理的一种特殊形式,那在UE4中要通过C++构建多线程任务该怎么办呢。下面就给大家介绍下UE4中多线程任务的C++构建教程,一起来看看吧。
在游戏的主线程中,如果存在一个很复杂的运算,那么游戏很容易造成卡顿。在这篇博客里,我使用查找第N个质数的函数作为范例,并且分别创建了一个在游戏主进程以及新开线程中的调用。
函数构建
新建一个AActor,加入如下函数:
新建一个FuntionLibrary,在其中加入CalculatePrimeNumbers函数,用于计算结果:
接着在Actor中添加CalculatePrimeNumbers函数:
并且添加一个CalculatePrimeNumbersAsync函数的空实现。在编译通过之后,在Actor的继承BP中添加操作如下:
Task的创建
提到多线程就一定是Tasks。在这里我们创建一个在另一个线程中执行CalculatePrimeNumbers函数的类。
在这里我们需要新添加一个类继承自FNonAbandonableTask的类(可以阅读引擎源代码查看该类的详细信息)。
RETURN_QUICK_DECLARE_CYCLE_STAT宏函数就是用于处理线程池相关的信息,而DoWork函数则是进行函数的调用。
因此在这里就可以在CalculatePrimeNumbersAsync函数中来进行调用了。需要注意的是我们需要创建一个FAutoDeleteAsyncTask来进行对应的操作,它能够保证在task完成后把自己删除。
如果读者想要了解更多关于UE4中的多线程操作,可以从源代码中的AsyncWork.h开始读起。