언리얼 엔진/C++

언리얼엔진 C++ Thread 만들기 (FRunnable)

mane 2022. 12. 5. 15:18
728x90
반응형

언리얼엔진에서 Thread 를 만드는 방법은 여러 가지 있는 걸로 알고 있다.

해당 글은 FRunnable 을 이용한 Thread 생성 방법을 설명한다.

참고사이트 :UE5 Multithreading With FRunnable And Thread Workflow – Unreal C++ API


[ FRunnable ]

class CORE_API FRunnable 
{
  public:
    virtual void Init();
    virtual uint32 Run = 0;
    virtual void Exit() {}
    virtual void Stop() {}
    virtual ~FRunnable() {}
}
  1. Init()
    • Game Thread 에서 실행된다. - Blocking
    • Thread 초기화 및 생성자이다.
    • false 를 반환하면 Thread 가 실행되지 않는다.
  2. Run()
    • 새로운 Thread 에서 실행된다. - Nonblocking
    • Multi Thread 작업을 수행하는 실제 함수이다.
  3. Exit()
    • 새로운 Thread 에서 실행된다 . - Nonblocking
    • Thread 실행이 완료되고 실행된다.
    • 즉, Run() 함수가 종료된 후 실행된다.
  4. Stop()
    • Game Thread 에서 실행된다. - Blocking
    • FRunnableThread::Kill() 이 호출되고 실행된다.

[ 사용법 ]

.h
class MYPROJECT_API FThreadTest : public FRunnable
{
public:
	FThreadTest();
	virtual ~FThreadTest() override;
	
	virtual bool Init() override;
	virtual uint32 Run() override;
	virtual void Exit() override;
	virtual void Stop() override;

private:
	FRunnableThread* Thread;
};

.cpp
FThreadTest::FThreadTest()
{
	Thread = FRunnableThread::Create(this, TEXT("Thread"));  // 생성자에서 Thread 생성
}


bool FThreadTest::Init()
{
	return true;
}

uint32 FThreadTest::Run()
{
	// TODO
	return 0;
}

void FThreadTest::Exit()
{
	UE_LOG(LogTemp, Warning, TEXT("Thread exit"));
}
// Thread 를 사용할 오브젝트
FThreadtest* Thread = new FThreadTest();​

 

728x90
반응형