MPR | mfc _beginthreadex 예제
155687
single,single-post,postid-155687,single-format-standard,ajax_fade,page_not_loaded,,select-theme-ver-3.2.1,popup-menu-slide-from-left,wpb-js-composer js-comp-ver-4.12,vc_responsive
 

mfc _beginthreadex 예제

mfc _beginthreadex 예제

_beginthread() 및 _beginthreadex() 함수는 새로 생성된 스레드에 핸들을 반환합니다. 그러나 함수 호출의 실제 반환 형식은 개체 핸들을 예상하는 함수 호출에 사용되기 전에 HANDLE에 형식 캐스팅되어야 하는 uintptr_t입니다. MFC UI 컨트롤은 스레드 안전이 아닙니다. 즉, 작업자 스레드 내에서 컨트롤을 조작해서는 안 됩니다. 예를 들어 작업자 스레드 내부에서 m_ctrlProgress.StepIt()를 호출할 수 없습니다. 실제로 이러한 간단한 함수에서 `벗어날 수 있습니다`하지만 더 복잡한 MFC UI 메서드는 신뢰할 수없는 결과를 제공합니다. 따라서 CreateThread(를 호출하는 대신 런타임 라이브러리에서 호출을 사용해야 합니다. 스레드를 만드는 두 가지 권장 되는 방법은 호출 _beginthread() 및 _beginthreadex()입니다. _beginthread() 및 _beginthreadex()를 사용할 때는 다중 스레드 라이브러리에 연결해야 합니다. 컴파일러마다 다를 수 있습니다. 이 두 함수간에는 매개 변수 이외의 다른 차이점이 있습니다.

_beginthread()에 의해 만들어진 스레드는 스레드가 종료될 때 핸들을 스레드에 닫고_beginthreadex()에서 반환되는 핸들은 POSIX의 분리된 스레드와 유사한 CloseHandle()를 호출하여 명시적으로 닫아야 합니다. _beginthread보다 _beginthreadex를 사용하는 것이 더 안전합니다. _beginthread에서 생성된 스레드가 빠르게 종료되면 _beginthread의 호출자에게 반환되는 핸들이 유효하지 않거나 다른 스레드를 가리킬 수 있습니다. 그러나 _beginthreadex에서 반환되는 핸들은 _beginthreadex 의 호출자에 의해 닫혀야 하므로 _beginthreadex가 오류를 반환하지 않은 경우 유효한 핸들이 될 수 있습니다. VC++ MFC 스레드 자습서: _beginthreadex, WaitForSingleObject, 일시 중지, 다시 시작 및 스레드 중지 위의 모든 c 런타임 라이브러리 함수는 process.h 헤더 파일에 있습니다. Microsoft Visual Studio 프로젝트 설정이 다중 스레드 DLL인지 확인합니다. _beginthread 및 _beginthreadex 함수는 C 런타임 라이브러리에서 스레드를 만드는 데 사용됩니다. 그러나 이러한 함수에는 몇 가지 차이점이 있습니다.

_beginthreadex에는 보안 및 스레드 주소와 같은 이내 매개 변수가 추가됩니다. _beginthread를 사용하여 스레드를 만들 때 스레드는 _endthread를 사용합니다. _endthread스레드 핸들을 자동으로 닫습니다. 그러나 _endthreadex를 사용하면 CloseHandle Win32 API 함수를 사용하여 nthread 핸들을 닫습니다. C 런타임 라이브러리에는 내부적으로 스레드 로컬 저장소(TLS)가 포함되어 있습니다. API 또는 컴파일러 특정 코드를 사용하여 스레드 로컬 저장소를 사용할 수 있습니다. TlsAlloc, TlsFree, TlsGetValue 및 TlsSetValue는 스레드 특정 데이터를 저장하는 데 사용됩니다. C 런 타임 라이브러리에 _beginthread 함수를 사용하는 경우 ExitThread 또는 CreateThread와 같은 Win32 API를 사용할 수 없습니다.

No Comments

Sorry, the comment form is closed at this time.