win32 thread 예제

뮤텍스를 소유하는 스레드만 해제할 수 있습니다. 뮤텍스를 파괴하려면 핸들을 사용하여 뮤텍스에 클로즈핸들을 호출합니다. Windows 다중 스레딩 기능을 사용하려면 프로그램에 를 포함해야 합니다. 스레드를 만들기 위해 Windows API는 CreateThread() 함수를 제공합니다. 스레드의 일시 중단 된 상태는 카운터로 처리 되므로 SuspendThread()에 대 한 여러 호출ResumeThread()에 대 한 여러 호출과 일치 해야 합니다. 스레드는 Windows 32비트 프로그래밍의 필수적인 부분입니다(향후 Windows 릴리스가 있는 64비트 프로그래밍). 다른 언어(어셈블리 언어 제외)보다 C++로 스레딩을 더 많이 제어할 수 있습니다. 주로 직렬 통신에 스레드를 사용하지만 정보를 처리하고 사용자 인터페이스를 연결하지 않으면 사용할 수도 있습니다. 위의 두 함수에 대한 설명에서 볼 수 있듯이 스레드가 실행하는 함수 유형에 따라 다릅니다: _beginthread()는 void 함수이며 기본 호출 규칙 __cdecl을 사용하고 _beginthreadex()는 부호 없는 int를 반환하고 __stdcall 호출 규칙입니다. WaitForSingleObject()에 대한 호출은 개체가 준비 상태를 신호할 때까지 기다립니다. 즉, 루틴은 핸들을 스레드에 전달하고 해당 스레드가 종료될 때까지 기다립니다.

동기화 개체의 소유권을 얻으려면 스레드에서 WaitForSingleObject, WaitForSingleObjectEx, WaitForMultipleObjects 또는 WaitForMultipleObjectsEx를 사용할 수 있습니다. 이 문서는 스레드를 만드는 초기 레슨을 수행하려는 초보자를 위한 것입니다. 이 문서에서는 CreateThread() 함수를 사용하여 스레드를 만드는 방법을 설명합니다. 멀티 스레드 프로그래밍을 배우기 시작했을 때, 나는 간단한 일반 영어로 멀티 스레딩과 관련된 개념을 설명하고 설명 할 간단하고 설명적인 프로그램과 기사를 찾는 데 매우 어려움을 겪었습니다. 이것이 CodeProject에 대한 멀티 스레딩에 대한 첫 번째 기사를 작성하게된 동기가 되었습니다. Windows API를 사용하여 C/C++ 코드를 작성할 때는 CreateThread를 통해 항상 _beginthread 및 _beginthreadex를 사용해야 합니다. 항상! 이 MSDN Q&A는 훌륭한 토론을 제공하며, _beginthreadex 대 CreateThread를 검색하면 온라인에서 더 많은 세부 정보가 있습니다. _beginthreadex()를 사용하는 다음 예제는 이전 코드와 동일합니다. _beginthreadex()에 의해 생성된 스레드는 CloseHandle()을 호출하여 정리해야 합니다. 따라서 WaitForSingleObject()에 대한 호출은 올바른 핸들을 얻을 수 있습니다: 다음 예제에서는 스레드 우선 순위 수준이 지정된 정책 또는 클래스 내에서 가장 낮은 수준으로 설정됩니다.

Windows API를 사용할 때는 SetThreadPriority()를 호출하여 수행됩니다. CREATE_SUSPENDED 플래그로 스레드를 만든 경우 ResumeThread를 호출하여 스레드를 사용할 수 있습니다. ResumeThread는 다음 매개 변수를 사용합니다. 스레드는 일시 중단된 상태에서 만든 다음 나중에 시작할 수 있습니다. 스레드가 일시 중단된 상태에 있는 경우 스레드 실행을 시작하는 호출은 ResumeThread()입니다.