본문 바로가기
Unreal

언리얼 엔진에서 비동기 작업을 수행하고 콜백 받기

by myroad 2023. 8. 18.
//this을 사용하면 AnyncTask함수을 호출하는 객체의 함수도 태스크 안에서 그대로 사용할 수 있다.

void AMyAsyncTask::RunTask(FTaskCallbackDelegate CallbackDel)
{
    UE_LOG(LogTemp, Log, TEXT("AMyAsyncTask::RunTask_111"));
    int32 NumCount = 100;
    AsyncTask(ENamedThreads::AnyHiPriThreadNormalTask, [this, NumCount, CallbackDel]()
        {
            UE_LOG(LogTemp, Log, TEXT("AMyAsyncTask::RunTask_222"));
            UE_LOG(LogTemp, Log, TEXT("%d"), NumCount);
            UpdateTask();
            CallbackDel.ExecuteIfBound();
            UE_LOG(LogTemp, Log, TEXT("AMyAsyncTask::RunTask_333"));
        });    
    UE_LOG(LogTemp, Log, TEXT("AMyAsyncTask::RunTask_444"));
}

void AMyAsyncTask::UpdateTask()
{
    UE_LOG(LogTemp, Log, TEXT("AMyAsyncTask::UpdateTask"));
    for (int ii = 0; ii < 10; ++ii)
    {
        FString Str = FString::Printf(TEXT("%d"), ii);
        GEngine->AddOnScreenDebugMessage(101, 1.0f, FColor::Green, Str, true, FVector2D(2.0, 2.0));
        FPlatformProcess::Sleep(1.0f);
    }
}