UE4 C++ 编写C++代码,实现蓝图节点多线程异步执行

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;
}

编译后打开蓝图,添加如下修改
UE4 C++ 编写C++代码,实现蓝图节点多线程异步执行_第1张图片
通过创建蓝图事件实现需要多线程执行的功能
运行测试


PS: 不要在主线程以外的线程做

1.对任何Actor的创建修改或删除操作
2.计时器
3.绘制

你可能感兴趣的:(UE4,学习)