'스레드'에 해당되는 글 2건

  1. 2006.12.27 TryEnterCriticalSection
  2. 2006.12.27 '_beginthreadex': identifier not found, even with argument-dependent lookup


TryEnterCriticalSection

Development/C / C++ 2006. 12. 27. 14:50
크리티컬 섹션에 관련된 함수 중의 TryEnterCriticalSection은 EnterCriticalSection함수 대신에
사용할 수 있는 함수인데 이 녀석은 Windows NT이상에만 사용할 수 있기 때문에 사용하기 위해서는 다음과 같은 일을 해주어야 한다.

1. #include <windows.h>   ; TryEnterCriticalSection은 winbase.h에 선언되어 있다.
2. _WIN32_WINNT Define
 두 가지 방법이 있다. 첫번째는 직접 소스코드에 define 해주거나 프로젝트 설정에서 Define해준다.
  1) _WIN32_WINNT 은 windows.h를 include하기 전에 define해준다.

#ifdef WIN32
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif
#endif

#include <windows.h>

 2) Project Property - C/C++ - Preprocessor
사용자 삽입 이미지
   
이 때 "_WIN32_WINNT=0x400" 에서 공백문자가 없도록!!

 
:

'_beginthreadex': identifier not found, even with argument-dependent lookup

Development/C / C++ 2006. 12. 27. 10:02
'_beginthreadex': identifier not found, even with argument-dependent lookup

크리티컬 섹션에 관련된 함수를 사용할 때 종종 빌드 에러를 만나게 되는데

VS.NET 에서 Win32 Console 프로젝트 기본 생성시에는 Run-time Library가 Single-Thread Debug로 잡혀있기 때문에 _beginthreadex를 찾지 못하여 빌드 에러가 발생한다.

사용자 삽입 이미지

스레드 사용 코드


사용자 삽입 이미지

빌드 에러



정상적으로 빌드를 하려면 프로젝트의 속성 창을 열어서 'C/C++ - Code Generation' 의
Run-time Library 항목을 Single Thread에서 Multi Thread로 바꾸어 주면 된다.

사용자 삽입 이미지

프로젝트 속성 설정화면






: