쓰레드 생성과 종료

2010. 1. 18. 21:46HW & SW

기본 개념!!

 - 프로세스: 메모리를 비롯한 각종 리소스를 담고 있는 컨테이너로서 정적인 개념

 - 스레드: 실제 CPU 시간을 할당 받아 수행되는 실행 단위로서 동적인 개념

 

즉, 프로세스가 메모리를 비롯한 각종 리소스를 담고 있고, 프로세스안에 존재하는 스레드가

 이들 리소스를 사용하여 필요한 각종 작업을 수행하는 것이다.

 

윈도우에서 스레드를 생성하기 위한 함수

      >>  CreateThread()  <<

 

HANDLE  CreateThread(

                LPSECURITY_ATTRIBUTES     lpThreadAttributes, 

                       // 대부분 NULL을 사용한다. 

                SIZE_T        dwStackSize,                                 

                       // 새로 생성할 스레드에 할당되는 스택의 크기, 0을 넣으면 디폴트로1MB가 할당

                LPTHREAD_START_ROUTINE  lpStartAddress,

                       // 스레드 함수의 시작 주소

                LPVOID       lpParameter,

                       // 스레드 함수에 전달할 인자, VOID형포인터이므로 32비트 하나만 전달 가능

                DWORD       dwCreationFlags,

                       // 스레드 생성을 제어하는 값으로 0또는 CREATE_SUSPENDED를 사용한다.

                          0을 사용하면 스레드 생성 후 곧바로 실행이지만 CREATE_SUSPENDED

                          사용시 ResumeThread() 함수를 호출하기 전까지는 실행되지 않는다.

                LPDWORD   lpThreadId

                       // DWORD형 변수 주소값으로, 이 변수에 스레드 ID가 저장된다.

                          스레드 ID가 필요하지 않다면 윈도우NT계열에서는 NULL값을 사용해도 된다.

                );

 

윈도우에서 스레드를 종료하는 방법

  - 스레드 함수가 리턴한다.

  - 스레드 함수 내에서 ExitThread() 함수를 호출한다.

  - TerminateThread() 함수를 호출한다.

  - 주 스레드가 종료하면 모든 스레드가 종료한다.  (주 스레드는 메인함수 실행시 시작)

 

 ==> 1,2 번으로 종료하는게 바람직하고.. 3번은 극단적인 경우에만 사용한다.

       4번은 스레드를 종료하는 정상적인 방법이기보다 주스레드(메인함수)의 특성으로 이해..

 

      >>  ExitThread()  <<

    void  ExitThread(

                   DWORD  dwExitCode         // 종료코드

                           );

 

      >>  TerminateThread()  <<

     BOOL  TerminateThread(

                   HANDLE  hThread,              // 종료할 스레드를 가리키는 핸들

                   DWORD   dwExitCode          // 종료코드

                                       );

                                            ==> 리턴 값( 성공: 0이 아닌 값, 실패 0 )


'HW & SW' 카테고리의 다른 글

네트워크 연결 속성을 열때 예상치 못한 오류 발생 해결책  (0) 2010.02.26
VC++ 6.0 주석매크로 설정  (0) 2010.01.25
다이얼로그 베이스 색상 변경  (0) 2010.01.18
Pointer  (0) 2009.08.05
PSPICE  (0) 2008.10.05