본문 바로가기

My Study/Function

CreateThread

HANDLE WINAPI CreateThread(
  __in_opt   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  __in       SIZE_T dwStackSize,
  __in       LPTHREAD_START_ROUTINE lpStartAddress,
  __in_opt   LPVOID lpParameter,
  __in       DWORD dwCreationFlags,
  __out_opt  LPDWORD lpThreadId
);

가장 기본적인 쓰레드 생성 함수
lpThreadAttributes : 핸들의 상속 여부, NULL이 전달되면 생성되는 핸들은 자식 프로세스 생성 시 상속 대상에서 제외

dwStackSize : 해당 쓰레드를 위한 스택이 별도로 생성, 이때 생성되는 쓰레드의 스택 크기를 지정
                      0 -> 디폴트 스택 사이즈(1M Byte) (너무 작은 사이즈 요구시 그냥 1M Byte로 해버림)
lpStartAddress : 쓰레드로 동작하기 위한 함수. 쓰레드의 main역할을 하는 함수를 지정하는 전달인자.
                       반환 타입이 DWORD이고 매개변수 타입은 LPVOID(void *)인 형태로 함수가 정의되어야 함

lpParameter : 쓰레드 함수에 전달한 인자를 지정하는 용도.

dwCreationFlags : 쓰레드의 생성 및 실행을 조절하기 위해 사용되는 전달인자.
                           0 - 생성과 동시에 실행 상태
                           CREATE_SUSPENDED - 생성과 동시에 Blocked상태(ResumeThread가 호출되면 실행을 시작)

lpThreadId - 쓰레드 ID를 전달받기 위한 변수의 주소값을 전달한다. 굳이 필요 없다면 NULL
 (단! Windows ME이하 버전에서는 NULL을 전달할 수 없기 때문에 범용적인 사용을 위해서라도 주소값을 전달하는 것이 안전)

성공하면 새로운 쓰레드의 핸들을 반환, 실패하면 NULL

이젠 CreateThread대신 _beginthreadex를 쓴다. 같은 메모리에 동시접근을 방지하기 위해서....!!
쓰레드 선언 - unsigned int WINAPI ThreadProc( LPVOID lpParam )
호출 시 - (HANDLE)_beginthreadex(NULL,0,ThreadProc,NULL,CREATE_SUSPENDED,(unsigned*)&dwThreadID);

'My Study > Function' 카테고리의 다른 글

OpenProcess  (0) 2010.02.24
ReadProcessMemory  (0) 2010.02.24
GetProcAddress  (0) 2010.02.24
SetCurrentDirectory  (0) 2010.02.24
GetWindowsDirectory  (0) 2010.02.24