코드를 지정된 스레드에서 실행하는 방식
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);
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 |