쓰레드의 생성
쓰레드 생성 함수 : CreateThread()
lpThreadAttributes | 보안 속성 지정 (핸들 상속 여부) |
dwStackSize | 쓰레드의 스택 크기 지정 ( 0 : default ) |
lpStartAddress |
쓰레드로 동작하기 위한 함수 (쓰레드의 Main 역할을 하는 함수) 반환 타입 : DWORD, 매개변수 타입 : LPVOID(void*) |
lpParameter | 쓰레드 함수에 전달할 인자 지정 (main 함수의 argv와 유사) |
dwCreationFlags |
쓰레드의 생성 및 실행을 조절 (CREATE_SUSPENDED : 쓰레드 생성과 동시에 blocked상태) |
lpThreadId | 쓰레드 ID를 전달받기 위한 변수의 주소값을 전달 (필요 없으면 NULL) |
쓰레드 흐름도
- main 쓰레드는 프로세스 전체를 대표한다. 따라서 main 쓰레드의 return문은 프로세스 종료로 이어진다.
- 쓰레드의 흐름을 예측한다는 것은 불가능하다. (어떤게 먼저 시작할지, 언제 시작할지 알 수 없다.)
쓰레드의 소멸
1. return 사용 (거의 대부분의 경우)
[EXAMPLE] 3개의 쓰레드를 생성해서 1부터 10까지의 덧셈연산을 나눠서 시킨다. A의 return값, B의 return값, C의 return 값을 얻어 main 쓰레드에서 합치면 효율이 더 좋다.
Thread의 종료 코드를 얻는 함수 : GetExitCodeThread()
hThread | 종료코드를 얻기 위한 쓰레드의 핸들 |
lpExitCode | 얻게 되는 종료코드를 저장할 메모리의 주소값 전달 |
2. ExitThread 사용 (특정 위치에서 쓰레드의 시행을 종료시킴)
dwExitCode | 커널 오브젝트에 등록되는 쓰레드 종료코드를 지정 |
- 언제 어디서나 쓰레드를 종료시킬 수 있다.
return과 ExitThread의 비교
thread function이 함수 A를 함수 A가 함수 B를, 함수 B가 함수 C를 호출하는 상황이다.
return은 thread function까지 다시 와야만 종료가 가능해지고,
ExitThread는 함수 A, 함수 B, 함수 C 어디서든 thread function을 종료시킬 수 있다.
3. TerminateThread 사용 (외부에서 쓰레드를 종료시킴)
hThread | 강제 종료할 쓰레드의 핸들 |
dwExitCode | 커널 오브젝트에 등록되는 쓰레드 종료코드를 지정 |
- main 함수 내에서 쓰레드를 생성할 경우 해당 쓰레드의 핸들을 얻게 되는데 이 핸들을 이용해서 쓰레드를 강제 종료 시킬 수 있다.
12.3 쓰레드의 상태 컨트롤 (0) | 2020.04.19 |
---|---|
12.2 쓰레드의 성격과 특성 (0) | 2020.04.19 |
11.2 쓰레드 구현 모델에 따른 구분 (0) | 2020.04.19 |
11.1 쓰레드란 무엇인가? (0) | 2020.04.19 |
09.1 프로세스의 스케줄링(Scheduling) (0) | 2020.04.18 |
댓글 영역