프로세스와 스레드를 만들어보자.
프로세스 만들기
인자가 굉장히 많다.
하나하나 천천히 살펴보자 .
lpApplicationName
- 윈도우 기반의 어플리케이션 이름이다 .
- 파일 이름의 확장자를 꼭 명시 해줘야한다 .
- 이 파라미터를 NULL 로 설정하면 lpCommandLine 에서 설정한다.
lpCommandLine
- 실행 시 전달 할 인자이다.
- lpApplicationName 에서 NULL 을 주었다면 여기서 실행파일과 인자를 명시할 수 있다.
lpProcessAttributes
- 쓰레드의 보안 속성을 지정함
- 일반적으론 사용하지 않고 NULL 을 설정함 .
bInheritHandles
- 프로세스 핸들의 상속 여부를 설정 한다.
- TRUE 면 자식 프로세스에게 상속 가능한 핸들을 생성하고, FALSE 면 상속 불가능한 핸들을 생성 한다.
dwCreationFlags
- 우선 순위 등급 및 프로세스의 생성을 제어하는 플래그 이다.
- Process Creation Flags의 값을 설정 한다.
- 일반적인 프로세스 생성 시 0을 설정 한다.
lpEnvironment
- 프로세스의 환경 블록을 설정 한다, 이 값이 NULL이면 부모 프로세스의 환경 블록을 사용 한다.
- 일반적으로 NULL값을 설정 한다.
lpCurrentDirectory
- 프로세스의 현재 디렉토리를 설정 한다, NULL값을 설정 하면 부모 프로세스의 현재 디렉토리가 해당 프로세스의 현재 디렉토리로 설정 된다.
- 일반적으로 NULL값을 설정 한다.
lpStartupInfo
- 프로세스의 초기화 정보를 설정 한다.
- STARTUPINFO(또는 STARTUPINFOEX) 구조체 변수의 값을 설정 하여 주소를 전달 한다.
**** STARTUPINFO 의 구조체의 크기를 정하는 cb는 반드시 설정하여야 하고, 나머지 멤버는 0으로 초기화 해야한다 . ***
lpProcessInformation
- 프로세스의 생성 후 결과 정보를 받기 위한 파라메터이다.
- PROCESS_INFORMATION 구조체 변수의 주소를 전달 한다.
반환 값
성공 시 0이 아닌 값을 반환하고, 실패 시 0을 반환 한다.
실패에 대한 자세한 정보는 GetLastError 함수를 통해 확인할 수 있다.
쓰레드 만들기
하나하나 인자들을 살펴보자 .
lpThreadAttributes
- 반환된 핸들을 자식 프로세스에 상속 할 수 있는지 여부를 결정하는 SECURITY_ATTRIBUTES 구조체 변수의 주소를 지정한다.
- 이 값을 NULL로 설정 시, 핸들은 상속되지 않는다.
dwStackSize
- 스레드가 사용할 스택의 초기 크기값(바이트 단위)을 설정한다.
- 이 값을 0으로 설정 시 기본 크기 값인 1Mbyte가 설정된다.
lpStartAddress
- 생성된 스레드가 실행 할 명령이 정의되어 있는 스레드 함수의 시작 주소를 설정한다.(스레드 함수 이름을 설정하면 됨)
- 스레드 함수의 원형은 WinBase.h에 정의되어 있는 ThreadProc를 사용한다.
*** msdn 을 참조하여 쓰레드 함수의 원형을 맞춰야 한다 . ***
lpParameter
- 스레드 함수의 전달 인자를 설정한다.
- 전달 인자 없을 시 NULL을 설정한다.
dwCreationFlags
- 스레드 생성을 제어하는 플래그
- 일반적으로 0을 설정하며 0으로 설정 시 스레드 생성 후 바로 실행된다.
lpThreadId
- 생성된 스레드의 식별자인 TID를 저장할 변수의 주소를 설정한다.
- 스레드 ID값이 필요없을 경우 NULL을 설정하며, NULL 설정 시 값을 반환하지 않는다.