* CreateThread보다는 _beginthreadex를..!!

2014/01/17 - [프로그래밍 언어/C++] - [Windows] 쓰레드(Thread) 생성 함수 - CreateThread, _beginthreadex

 

==============================

 

 

 

CreateThread()... 이녀석 귀찮게한다.

C/C++ / Programming

2013/01/26 22:35

 

복사

http://domece.blog.me/20177369583

전용뷰어 보기
 

 

MSDN에서 C++의 API에 있는 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으로 놓는다.
lpStartAddress는 함수가 시작할 위치... 라는 건데, 간단하게 스레드에서 실행할 작업함수(Worker Function)을 지정해 주는것이다.
일반적으로 다음과 같이 정의된다.

DWORD WINAPI Worker_Function(LPVOID lpParam);

lpParameter는 함수에 넘겨줄 인자, 즉 위 함수에 나타난 LPVOID lpParam;을 뜻한다.
LPVOID형이기 때문에 어떤 형이든지 LPVOID로 캐스팅하여 넘길수 있으며, 여러개의 인자를 넘기고 싶은경우는
배열을 넘기거나 구조체 등을 넘기는 형식으로 가능하다. 혹은, 클래스나 공용체들도 사용가능한데 포인터를 취할 수 있는
모든 종류의 변수를 넘길수 있다.

dwCreationFlag는 값에 따라 생성시에 동작이 달라진다. 0은 스레드 생성과 동시에 실행, CREATE_SUSPEND(0x04)는 생성과
동시에 일시정지가 되며, ResumeThread()을 통해 작업을 실행한다. STACK_SIZE_PARAM_IS_A_RESERVATION도 정의되어 있는데,
dwStackSize를 스택 사이즈에 반영한다는 점인것 같은데... 잘 모르겠다. 일반적으로 0으로 놓는편이다.
CREATE_SUSPEND는 멀티스레드 여러개를 돌리면서 한번에 실행시킬때 많이 사용한다.

lpThreadId는 생성된 스레드의 식별자를 받을 변수를 지정한다. DWORD형의 변수의 주소를 넘기면 된다.
스레드 식별자를 알 필요가 없다면 NULL로 놓는다.

출처 : MSDN을 이용했음.
 

 

 

==============================

 

[출처] CreateThread()... 이녀석 귀찮게한다.|작성자 Air

걍 그대로 긁어옴

 

윈도우에서 스레드(thread) 헤더는 Window.h