Presentation is loading. Please wait.

Presentation is loading. Please wait.

contents Thread function Create Thread Terminate Thread

Similar presentations


Presentation on theme: "contents Thread function Create Thread Terminate Thread"— Presentation transcript:

0 Windows System Programming
- Thread creation, destruction- Tutor: 배문희

1 contents Thread function Create Thread Terminate Thread
The inner Thread C/C++ Runtime Library 호남대학교 정보통신공학과

2 Thread First Creation 호남대학교 정보통신공학과

3 Thread Function Thread entry point function 호남대학교 정보통신공학과

4 Thread Funtion Thread를 생성하기 위해서
모든 스레드는 수행을 시작할 진입점 함수(entry-point function)을 반드시 가져야 한다. Thread entry-point function format DWORD WINAPI ThreadFunc(PVOID pvParam){ DWORD dwResult = 0; return (dwResult); } 프로세스 생성과 동시에 main함수를 호출해줄 스레드를 생성한다. 이러한 스레드를 주 스레드(main thread)라고 부르며 프로그래머에 의해 생성되는 쓰레드와 구분지어 말한다. 즉! 주 스레드의 진입점 함수는 _tmain이나 _tWinMain이다. 호남대학교 정보통신공학과

5 Thread Funtion Thread entry-point funtion
DWORD WINAPI ThreadFunc(PVOID pvParam){ DWORD dwResult = 0; return (dwResult); } 하나의 매개변수만 전달 가능 반드시 값을 반환해야 한다  스레드의 종료코드가 된다 스레드 함수를 포함한 스레드에서 사용되는 함수들에는 가능한 한 함수 매개변수와 지역변수만을 사용하도록 작성  만일 정적(static)이나 전역(global)변수를 사용하면 다수의 스레드가 접근: 이는 변수 값이 잘못 변경되는 원인이 됨 호남대학교 정보통신공학과

6 Create Thread CreateThread function 호남대학교 정보통신공학과

7 CreateThread CreateThread function format HANDLE WINAPI CreateThread(
스레드 커널 오브젝트 핸들 상속에 대한 설정 자식프로세스에게 핸들상속: SECURITY_ATTRIBUTES구조체의 bInhertHandle속성을 TRUE CreateThread function format HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 스레드 스택의 사이즈 기본값(0) : 1024*1024 스레드 함수 주소와 매개변수 스레드 함수 세부 제어 플래그 스레드 ID값을 저장할 DWORD변수 주소 CreateThread함수에 대하여 Windows가 제공하는 함수 C/C++코드로 작성할 경우 MS C/C++ 런타임 라이브러리에서 제공하는 _beginthreadex함수를 사용 각 컴파일러는 CreateThread함수를 대체할만한 함수를 제공 반드시 컴파일러에 의해 제공되는 다른 함수를 사용 호남대학교 정보통신공학과

8 Terminate Thread Thread 종료 4가지 방법 호남대학교 정보통신공학과

9 Terminate Thread Thread를 제거하기 위해서 스레드 함수 반환 (강추)
스레드 함수 내에서 ExitThread함수 호출 (비추) 동일한 프로세스나 다른 프로세스에게 TerminateThread함수 호출 스레드가 포함된 프로세스 종료 스레드 함수 자체의 반환이 가장 안전적이며 다른 방법은 자제 할 것을 권고 그럼에도 다른 방법이 존재 하는 것은 꼭 필요로 하는 부분이 있기 때문 단편적인 예로 ExitThread함수로 Thread를 종료할 경우 C++의 new연산으로 생성된 객체에 대하여 파괴자호출이 발생되지 않기 때문에 메모리에 그대로 남게 되어 메모리 누수가 발생되는 문제가 있다. 호남대학교 정보통신공학과

10 The inner Thread Thread의 내부 호남대학교 정보통신공학과

11 Thread의 내부 VOID RtlUserThreadStart(...) { ... } Thread kernel object
IP SP 사용카운트 = 2 컨텍스트 다른속성과 통계 정보 Thread kernel object 다른 CPU 레지스터 정지카운트 = 1 종료코드 = STILL_ACTIVE 시그널 상태 = FALSE pfnStartAddr pvParam Thread Stack 1. CreateThread함수 호출 2. 스레드 커널 오브젝트 생성 3. 스레드 스택 메모리 공간 할당 프로세스의 주소공간으로 부터 할당 4. 초기화 완료 레지스터 셋의 값 지정 5. IP로 부터 RtlUserThreadStart함수 호출 6. 스레드 시작 VOID RtlUserThreadStart(...) { ... } NTDLL.dll 쓰레드의 실행 순서에 대한 내부 구조 호남대학교 정보통신공학과

12 C/C++ Runtime Library C/C++ 런타임 라이브러리에 대한 고찰 호남대학교 정보통신공학과

13 C/C++ Runtime Library C/C++ Runtime Library에 대한 고찰
해결방법 uintptr_t __cdecl _beginthreadex( void * _Security, nsigned _StackSize, unsigned (__stdcall * _StartAddress) (void *), void * _ArgList, unsigned _InitFlag, unsigned * _ThrdAddr ); 호남대학교 정보통신공학과

14 참고문헌 뇌를 자극하는 윈도우 시스템 프로그래밍 한빛미디어 윤성우 저 제프리 리처의 WINDOWS VIA C/C++
제프리 리처, 크리스토프 나자르 저 김명신 역 호남대학교 정보통신공학과


Download ppt "contents Thread function Create Thread Terminate Thread"

Similar presentations


Ads by Google