欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

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


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

1.对任何Actor的创建修改或删除操作
2.计时器
3.绘制
相关标签: UE4 学习