UE4 C++ 编写C++代码,实现蓝图节点多线程异步执行
程序员文章站
2022-06-04 23:44:02
...
ue4的蓝图本身是单线程执行,再加上本身的性能问题,一旦出现需要许多节点的运算就会出现卡顿。
1打开编辑器,创建C++第三人称模板
2打开vs,开始改代码
想要创建线程,首先需要继承FRunnable(ue4 C++本身不支持类的多继承,但是FRunnable在ue4中被定义为是接口,与普通的类不同)
首先引用以下头文件
#include "HAL/Runnable.h"
#include "HAL/RunnableThread.h"
修改类的继承
class AAsyncBlueprintCharacter : public ACharacter,public FRunnable
{
......
}
在类中添加两个函数定义
//xxx.h
public:
UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
void SynchroFunction ();//被具体执行的函数,在蓝图实现
UFUNCTION(BlueprintCallable)
void AsyncFunction();
virtual uint32 Run() override;
virtual void Exit() override;
FRunnableThread* thread;//实际线程指针
bool IsProssesing=false;//标记线程是否正在运行
对两个函数在CPP文件中加以实现
//xxx.cpp
//创建线程,开始执行任务
void AAsyncBlueprintCharacter::AsyncFunction()
{
if (!IsProssesing)
{
IsProssesing = true;
thread = FRunnableThread::Create(this, TEXT("AsyncBlueprint"));
}
}
//线程执行主体
uint32 AAsyncBlueprintCharacter::Run()
{
SynchroFunction();
return uint32();
}
//执行完成后删除线程
void AAsyncBlueprintCharacter::Exit()
{
delete thread;
thread = nullptr;
IsProssesing = false;
}
编译后打开蓝图,添加如下修改
通过创建蓝图事件实现需要多线程执行的功能
运行测试
PS: 不要在主线程以外的线程做
1.对任何Actor的创建修改或删除操作
2.计时器
3.绘制
上一篇: mysql LOAD语句批量录入数据
下一篇: 详解redis集群规范知识