◆ 무한한 가능성/& Visual C/C++

Thread

치로로 2009. 8. 19. 11:28

<<Thread>>


*스레드 생성
 : 스레드 생성시.. 프로세스에 'CPU에 레지스터''메모리 영역에 static영역'이 추가된다.
※ 프로세스의 구성요소는...
CPU에 레지스터, 메모리 영역에 code영역, 커널오브젝트, Heap영역, static영역으로 구성된다.


** CreateThread API 함수

HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,  // 커널 오브젝트에 대한 보안 속성
  DWORD dwStackSize,                                    // 스레드가 사용할 스택 영역의 크기
  LPTHREAD_START_ROUTINE lpStartAddress,    // 스레드 오브젝트가 실행할 시작점
  LPVOID lpParameter,                                      // 생성될 스레드에게 전달할 포인터
  DWORD dwCreationFlags,                               // 스레드 생성 옵션
  LPDWORD lpThreadId                                     // 생성된 스레드의 아이디
);



*스레드 종료
: 스레드 함수가 리턴, 스레드 함수가 ExitThread API 함수 호출, 외부 스레드에서 TerminateThread 호출
(ExitThread 보다는 리턴을 권장함, 이유는 ExitThread하면 C Runtime lib의 각종 자원해제 불가)

** 스레드 함수가 Return; (정상종료::자원해제완료)

** ExitThread API 함수 (정상종료::자원해제불가)
VOID ExitThread(
  UINT uExitCode     // 스레드 종료 코드
);

** TerminateThread API 함수 (thread 강제종료)
BOOL TerminateThread(
  HANDLE hThread,       // 스레드 핸들
  DWORD dwExitCode    // 종료 코드
);

** GetExitCodeThread API 함수 (종료상태확인)
BOOL GetExitCodeThread(
  HANDLE hThread,        // 확인할 스레드 핸들
  LPDWORD lpExitCode   // 종료 코드
);
 : return 값이 STILL_ACTIVE 면 아직 스레드가 실행중인 것이고,
다른 값이면 아래의 셋중에 하나이다.
1) ExitThread, TerminateThread 종료될때 공통들어가는 인자값
2) 정상적으로 스레드 함수가 종료될때 경우의 리턴값
3) 스레드를 종료하는 과정에서 발생되는 예외값