오늘 정리해 볼 주제는 beginthreadex() api 를 활용하여 멀티 스레드를 구현하는 방법입니다
Today's topic is how to implement multi-thread application using windows api, beginthreadex().
프로세스와 스레드의 개념에 대해서는 이미 알고 있다는 전제하에 오늘의 주제인 멀티 스레드 프로그램을 구현하는 방법 (beginthreadex 을 이용) 을 다뤄보겠습이다
I suppose you to already know about the concept of what the process and thread is, so directly get to today's topic.
함수 이름에서도 알 수 있듯이, beginethreadex() 를 사용하면 스레드를 생성할 수 있습니다
As the name of function, beginthreadex(), says, it makes independent thread itself.
스레드를 어떤 식으로 동작 시킬 것인지, 스레드의 종료는 어떻게 구현할 것인지 등의 세부 사항을 인자를 통해 혹은 이벤트 객체를 생성하는 방식 등으로 명시해주어야 합니다
You should specify how the thread operates by parameter, and how the thread ends
uintptr_t _beginthreadex( // NATIVE CODE void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr );
security : SECURITY_ATTRIBUTES 구조체의 포인터로 함수의 반환값인 스레드 핸들이 자식프로세스에 상속될 지 여부를 나타낸다 이 값으로 NULL 을 주면 생성된 스레드는 상속불가, WINDOWS 95 에서는 반드시 NULL 을 주어야 한다
stack_size : 새롭게 생성될 스레드의 스택 크기, 또는 0을 준다
start_address : 새롭게 생성된 스레드가 동작할 때 실행할 루틴의 주소
arglist : 생성된 스레드로 넘길 인자 리스트, 또는 NULL 을 넘긴다
initflag : 초기 스레드의 상태를 제어하는 플래그로, 이 값을 0 으로 설정하면 스레드가 생성된 즉시 실행된다 CREATE_SUSPENDED 로 설정하면 스레드가 suspended 상태로 생성된다 - ResumeThread() 로 스레드를 재개시켜 주어야 한다 스택 크기를 초기 reserve 사이즈로 사용하려면 이 값을 STACK_SIZE_PARAM_IS_A_RESERVATION 로 설정하면 되고 그렇지 않았을 경우엔 스택 크기는 자동으로 commit 사이즈로 설정된다
thraddr : 32 비트짜리 변수의 포인터로, 스레드 식별을 위해 사용된다 사용하지 않을 시엔 NULL 로 설정
반환값
함수가 성공할 시 새롭게 생성된 스레드의 핸들값이 반환되지만 실패 시, 0 이 반환되고 errno 와 _doserrno 가 세팅된다
댓글 없음:
댓글 쓰기