코드를 지정된 스레드에서 실행하는 방식

CORE_API void AsyncTask(ENamedThreads::Type Thread, TUniqueFunction<void()> Function);


// 예시
AsyncTask(ENamedThreads::GameThread, [this]()
{
	// GameThread 에 실행할 내용
});

UObject 를 게임 스레드가 아닌 다른 스레드에서 상태를 변경하려고 시도하면 동기화 문제로 인해 오류가 발생할 수 있으므로 GameThread를 사용

 

 

ex) 서버로부터 받은 콜백 함수가 실행되는 스레드가 게임스레드가 아님

현재 호출되는 Thread 이름 가져오기

uint32 ThreadId = FPlatformTLS::GetCurrentThreadId(); 
FString ThreadName = FThreadManager::Get().GetThreadName(ThreadId);

서버로 보낼 때 Thread는 GameThread 였지만

 

Callback 을 받은 람다함수 내에선 GameThread가 아님

 

 

GameThread 내에서 위젯을 조작하려하면 SWidget::Invalidate SLATE_CROSS_THREAD_CHECK()에서 계속 걸림

 

 

BP 함수 예시

DECLARE_DYNAMIC_DELEGATE_OneParam(FTestDelegate, FString, StringOut);

UCLASS()
class YOURPROJECT_API UBPFunctionTest : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()

    /** Executes every 1000th Prime count */
    UFUNCTION(BlueprintCallable, Category = "AsyncTest", meta=(DisplayName="AsyncTest", Keywords = "async"))
    static void AsyncPrimeCount(FTestDelegate Out, int32 PrimeCount);
};

 

 

'언리얼' 카테고리의 다른 글

FAB 플러그인 등록 과정  (1) 2025.04.24
모바일 EnableGestureRecognizer 관련  (0) 2025.01.02
Save / Load GameData (.sav)  (0) 2024.07.19
SceneCaptureComponent2D  (0) 2024.06.26
ChunkDownloader  (0) 2024.05.02

+ Recent posts