<<Thread in C runtime library>>
▷ _tiddata
: 다중 스레드에서의 C runtime library 문제점을 해소하려면,
이와 같은 전역변수, 정적변수들을 스레드당 별도로 생성하여 관리해야 한다.
이러한 데이터들을 모아놓은 것이 구조체 _tiddata 이다.
▶ 다중 스레드(/MT) - LIBCMT.LIB
▶ 다중 스레드 디버그(/MTd) - LIBCMTD.LIB
▶ 다중 스레드 DLL(/MD) - MSVCRt.LIB
▶ 다중 스레드(/MDd) - MSVCRtD.LIB
*스레드 생성
** _beginthread
unsigned long _beginthread(
void(__cdecl * start_address)(void*),
unsigned stack_size,
void *arglist
);
// start_address
: 생설될 스레드가 실행할 루틴의 시작주소, 함수 호출 규약은 __cdecl
// stack_size
: 생성될 스레드가 사용할 스택의 크기, '0'이면 기본 크기
** _beginthreadex
unsigned long _beginthreadex(
void *security,
unsigned stack_size,
unsigned (__stdcall *start_address)(void *),
void *arglist
unsigned initflag,
unsigned *thrdaddr
);
// security
: 생설될 스레드의 보안속성
// stack_size
: 생성될 스레드가 사용할 스택의 크기, '0'이면 기본 크기
// start_address
: 생설될 스레드가 실행할 루틴의 시작주소, 함수 호출 규약은 __stdcall
// arglist
: 생설될 스레드가 실행할 실행 루틴에게 전달될 매개변수 리스트, 여러 개 전달가능
// initflag
: 스레드 커널 오브젝트가 함수를 실행할 때 적용되는 플래그
: NULL(0)일 경우, 스레드 커널 오브젝트 생성과 동시에 함수 실행, CREATE_SUSPENDED 시 대기
// thrdaddr
: CreateThread에서의 lpThreadId와 같음
*스레드 종료
: _beginthread / _beginthreadex는 스레드를 생성하기 전에 _tiddata를 사용하기 위한 메모리 영역을 할당하기 때문에, 스레드를 종료할 때 반드시 해제 과정을 거쳐야함
(즉, ExitThread / return 을 하지 않고, _endthread / _endthreadex를 사용)
** _endthread
void _endthread( void );
** _endthreadex
void _endthreadex( unsigned retval ); // 종료 코드
'◆ 무한한 가능성 > & Visual C/C++' 카테고리의 다른 글
Thread - C 런타임 함수와 WIN32 API (0) | 2009.08.19 |
---|---|
Thread in C runtime library> example code. - Thread04 (0) | 2009.08.19 |
Thread example code. - Thread03 (0) | 2009.08.19 |
Thread (0) | 2009.08.19 |
Kernel Object (0) | 2009.08.17 |