코딩/C and C++

CreateThread, _beginthreadex 차이점

이쿠우우 2020. 9. 3. 17:55
반응형

Thead ( CreateThread, _beginthreadex 차이점 )

 

 

 

CreateThread

_beginthreadex

제공

Win32 API

C Run Time Library

역할

Thread 생성 함수

Thread 생성 함수

Return 자료형, 값

자료형 : HANDLE
성공 : 성공 시 생성된
        커널 오브젝트의 핸들
실패 : NULL

자료형 : unsigend long
성공 : 성공 시 생성된 소켓의 핸들
실패 : NULL

함수호출 규약

__stdcall

__stdcall

Thread  ID 데이터 타입
(매개변수 6번째 인자)

DWORD

UNIT

Thread 함수의 
리턴 타입

DWORD

UNIT

 

ExitThread(DWORD dwExitCode)

_beginthreadex 가 호출하는 
Thread 함수 안에서
_endthreadex(0); 호출

 

CreateThread 대신 _beginthreadex 를 써야하는 경우

1. 부동 소수형 변수나 함수를 사용할 경우

2. C의 malloc과 free나 C++ 의 new와 delete 를 사용할경우

3. stdio.h 나 io.h에서 어떤 함수를 호출한다면

4. strtok() 나 rand() 와 같이 정적 버퍼를 사용 하는 어떤 런타임 함수를 호출할 경우

  • strtok 같은것

    • c 런타임 함수들중 전역 자원을 쓰는 함수들이 있음

    • 이런경우 멀티스레드 환경에서 문제가 될수 있기때문에

    • c 런타임 함수들을 위한 각각의 전역자원공간을 스레드마다

    • 할당하는 함수가 _beginthread , _beginthreadex 

    • 이 함수들도 내부적으로는 CreateThread를 호출

위 4가지 중 해당이 안된다면 CreateThread 함수를 사용하는 것이 유용함

 

 

 

 

 


제 글을 복사할 시 출처를 명시해주세요.
글에 오타, 오류가 있다면 댓글로 알려주세요! 바로 수정하겠습니다!


 

 

 

반응형