1、首先使用的是创建AsyncTask的类来执行多线程,并将要返回的值写成变量
TestTask.h
class TestTask: public FNonAbandonableTask
{
public:
int32 TestNum;
TestTask();
virtual ~TestTask();
FORCEINLINE TStatId GetStatId() const { RETURN_QUICK_DECLARE_CYCLE_STAT(VoiceRecognizeTask, STATGROUP_ThreadPoolAsyncTasks); }
void DoWork();
}
TestTask.cpp
void TestTask::DoWork()
{
TestNum=FMath::RandRange(1,100);//随机一个数字出来
}
2、创建TestTask类,开始在后台执行,并在Tick函数中等待执行完成
void ATestAsyncCharacter::RunTask()
{
AsyncTask=new FAsyncTask<TestTask>();//创建AsyncTask类
AsyncTask->StartBackgroundTask();//开始执行任务
SetActorTickEnabled(true);
}
void ATestAsyncCharacter::Tick(float DeltaSeconds)
{
if(AsyncTask&&AsyncTask->IsDone())
{
GEngine->AddOnScreenDebugMessage(1,2,FColor::Green,FString::FromInt(AsyncTask->GetTask().TestNum));\\将TestNum投射在屏幕上
delete AsyncTask;
AsyncTask=nullptr;
SetActorTickEnabled(false);
}
}
3、在蓝图中调用函数并执行
Async中执行的函数得到结果