_endthreadex 예제

_beginthreadex를 사용하여 만든 스레드는 _endthreadex 호출에 의해 종료됩니다. 다음 샘플 코드는 동기화 API WaitForSingleObject와 _beginthreadex에서 반환되는 스레드 핸들을 사용하는 방법을 보여 줍니다. 주 스레드는 두 번째 스레드가 계속되기 전에 종료될 때까지 기다립니다. 두 번째 스레드가 _endthreadex를 호출하면 스레드 개체가 신호된 상태로 이동하게 됩니다. 이렇게 하면 기본 스레드가 계속 실행될 수 있습니다. _endthread는 Signaled 상태로 설정하기 전에 스레드 개체를 삭제하는 CloseHandle을 호출하기 때문에 _beginthread 및 _endthread에서는 이 작업을 수행할 수 없습니다. KB 기사 132078 (« 사용 방법 _beginthreadex() 및 _endthreadex() »)는 보관된 것 같기 때문에 여기에 요약합니다. 기본적으로 _beginthreadex() 및 _endthreadex()를 사용하는 것이 좋으며 샘플 프로그램이 있습니다. 위의 샘플은 KB 문서에서 샘플의 개선 된 버전입니다. 이미 언급했듯이 호출할 필요가 없습니다. 코드에 관해서는, 나는 최종 반환 0 이라고 생각; _endthreadex()가 반환되지 않기 때문에 호출되지 도 없습니다.

이로 인해 로컬 개체의 소멸자가 호출되지 않을 수도 있으므로(MSDN이 말하고 싶었던 내용) 이 함수를 사용하면 C++에서 도 해로울 수 있습니다. Boost.Thread를 사용하는 것이 좋습니다. 다음 예제에서는 세 가지 방법을 사용하여 스레드를 만듭니다: 대답은 이미 짧은 버전으로 제공되고, 더 많은 것을 알고 싶다면 함수의 반환은 실제로 _endthreadex 호출의 인수로 사용됩니다. 다음은 스레드를 시작할 때 수행되는 런타임입니다. 스레드는 실제로 내부 _callthreadex가 수행하는 CRT의 시작점으로 시작됩니다: _endthread는 스레드 핸들을 자동으로 닫지만 _endthreadex는 그렇지 않습니다. 따라서 _beginthread 및 _endthread를 사용 하는 경우 Win32 CloseHandle API를 호출 하 여 스레드 핸들을 명시적으로 닫지 마십시오. 이 동작은 Win32 ExitThread API와 다릅니다. _beginthreadex 함수를 사용하면 _beginthread보다 스레드가 만들어지는 방법을 보다 세울 수 있습니다. _endthreadex 기능도 더 유연합니다.

예를 들어 _beginthreadex를 사용하면 보안 정보를 사용하고 스레드의 초기 상태(실행 또는 일시 중단)를 설정하고 새로 만든 스레드의 스레드 식별자를 얻을 수 있습니다. _beginthread로는 수행할 수 없는 동기화 API와 함께 _beginthreadex에서 반환되는 스레드 핸들을 사용할 수도 있습니다. 참고: LIBCMT에 연결된 실행 파일의 경우. LIB는 Win32 ExitThread() API를 호출하지 않습니다. 이렇게 하면 런타임 시스템에서 할당된 리소스를 회수할 수 없습니다. _endthread() 및 _endthreadex() 할당된 스레드 리소스를 회수한 다음 ExitThread()를 호출합니다. _endthread()는 스레드 핸들을 자동으로 닫습니다. 이 동작은 Win32 ExitThread() API와 다릅니다. 따라서 _beginthread() 및 _endthread()를 사용하는 경우 Win32 CloseHandle() API를 호출하여 스레드 핸들을 명시적으로 닫지 마십시오. Win32 ExitThread() API와 마찬가지로 _endthreadex()는 스레드 핸들을 닫지 않습니다. 따라서 _beginthreadex() 및 _endthreadex(_endthreadex)를 사용하는 경우 Win32 CloseHandle() API를 호출하여 스레드 핸들을 닫아야 합니다.

실제로 _endthreadex()를 전혀 호출할 필요가 없습니다. 스레드 함수가 어쨌든 반환 된 후 자동으로 호출됩니다. [! 참고] Libcmt.lib에 연결된 실행 파일의 경우 Run-time 시스템이 할당된 리소스를 회수하는 것을 방지하지 않도록 Win32 ExitThread API를 호출하지 마십시오.

This entry was posted in Non classé. Bookmark the permalink.

Comments are closed.