스레드는 프로그래밍에서 두개 이상의 흐름이 필요할 때 사용한다.
이번에는 로딩하면서 화면에 출력을 동시에 하기 위해 스레드를 사용했다.
스레드들이 서로 공유하는 자원을 크리티컬 섹션이라고 한다.
서로 공유하기 때문에 동시에 두 개 이상의 스레드가 접근하면 문제가 발생할 수 있다.
그래서 이를 통제하기 위한 함수들이 존재한다.
InitializeCriticalSection으로 먼저 크리티컬 섹션을 초기화한다.
그리고 _beginthreadex함수로 스레드 함수로 루틴을 실행하는 스레드를 만들 수 있다.
uintptr_t _beginthreadex( // NATIVE CODE
void *security,
unsigned stack_size,
unsigned ( __stdcall *start_address )( void * ),
void *arglist,
unsigned initflag,
unsigned *thrdaddr
);
함수의 형태는 이렇게 되는데, 스레드 함수의 포인터가 start_address이며 함수는 __stdcall의 함수 호출 규약 형태여야 한다. 그리고 그 스레드 함수에 arglist를 매개변수로 전달한다.
스레드 함수 내에서 EnterCriticalSection과 LeaveCriticalSection을 사용한다.
Enter하고 Leave 전까지 한개의 스레드만이 접근할 수 있다.
WaitForSingleObject(m_hThread, INFINITE);
CloseHandle(m_hThread);
DeleteObject(m_hThread);
DeleteCriticalSection(&m_CriticalSection);
그리고 스레드를 가진 객체가 소멸될 때 WaitForSingleObject로 스레드의 함수가 끝날 때까지 기다릴 수 있다.
그 후 차례로 스레드를 삭제하고 크리티컬섹션까지 삭제한다.
'Today I Learned' 카테고리의 다른 글
| 23. 05. 24 - 좌표 변환 (0) | 2023.05.24 |
|---|---|
| 23. 05. 19 - 프로토타입, map 사용시 주의점 (0) | 2023.05.19 |
| 23. 05. 16 - Depth Buffer (0) | 2023.05.16 |
| 23. 05. 15 - 정적 라이브러리와 동적 라이브러리 외 (0) | 2023.05.15 |
| 23. 05. 12 - CBase 클래스, 소멸자 vs 함수, 라이브러리 만들고 적용 (0) | 2023.05.12 |