UE4/UE5 执行多线程并返回运行结果

953 阅读1分钟

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、在蓝图中调用函数并执行

image.png

image.png

Async中执行的函数得到结果