Proud::Thread 클래스 참조

Public 타입

typedef void(* ThreadProc )(void *ctx)
 

Public 멤버 함수

PROUD_API Thread (ThreadProc threadProc, void *ctx, bool neededJoin=true)
 
PROUD_API ~Thread ()
 
PROUD_API void Start ()
 
PROUD_API void Join ()
 
 __declspec (property(get=GetHandle)) HANDLE Handle
 
HANDLE GetHandle ()
 
 __declspec (property(get=GetID)) uint64_t ID
 
uint64_t GetID ()
 
bool IsAlive () const
 

정적 Public 멤버 함수

static PROUD_API void NotifyDllProcessDetached ()
 

Public 속성

bool m_useComModel
 

정적 Public 속성

static bool m_dllProcessDetached_INTERNAL
 

Friends

class ThreadProcContext
 

상세한 설명

단순 스레드 Wrapper 클래스입니다.

  • 이 인스턴스를 생성한 후 Start를 호출하면 스레드가 생성됩니다. 그리고 이 인스턴스가 파괴되면 생성되었던 스레드가 종료할 때까지 블러킹됩니다.
  • 이 클래스는 .net framework의 System.Threading.Thread 클래스와 같은 작동 방식을 가집니다.

일반적 사용법

  • Thread 객체를 생성하되, 파라메터로 스레드 함수를 지정합니다. 스레드 함수는 생성자에서 지정합니다.
  • Thread 객체를 생성한다고 해서 바로 스레드가 작동하지는 않습니다. Start를 실행해야만 합니다.
  • Join을 호출하거나 Thread 객체가 파괴될 때 실행중인 스레드가 종료할 때까지 기다립니다.

    여러분은 스레드가 실행할 루틴을 아래처럼 람다식(lambda expression)으로 만드셔도 됩니다.

CriticalSection critSec;
int totalWorkCount = 0;
volatile bool stopThread = false;
ThreadPtr th = ThreadPtr(new Thread([&]()
{
// note that thread function is defined exactly here
// and even the variables out of the scope are
// used here, thankfully by lambda capture above.
while (!stopThread)
{
CriticalSectionLock lock(critSec, true);
do_something();
totalWorkCount++;
}
});
th->Start();
do_something_or_wait();
stopThread = true;
th->Join();
print(totalWorkCount);

생성자 & 소멸자 문서화

PROUD_API Proud::Thread::~Thread ( )

파괴자

  • 스레드가 미실행중이면 즉시 리턴하나, 스레드가 이미 실행중이면 스레드가 종료할 때까지 기다린다.

멤버 함수 문서화

Proud::Thread::__declspec ( property(get=GetHandle )

스레드 핸들

Proud::Thread::__declspec ( property(get=GetID )

스레드 아이디

HANDLE Proud::Thread::GetHandle ( )
inline

스레드 핸들을 얻는다.

uint64_t Proud::Thread::GetID ( )
inline

스레드 아이디를 얻습니다. 이 값은 Proud.GetCurrentThreadID()의 값과 호환됩니다.

PROUD_API void Proud::Thread::Join ( )

스레드가 종료할 때까지 기다린다.

static PROUD_API void Proud::Thread::NotifyDllProcessDetached ( )
static

Static library로서의 ProudNet이 DLL에서 사용되는 경우 DllMain의 Process detach case에서 이 메서드를 꼭 호출해야 한다.

PROUD_API void Proud::Thread::Start ( )

스레드를 생성한다.

  • 이미 생성한 상태면 예외가 발생한다.