2 Agosto 2019

waitformultipleobjects 예제

_beginthread() 및 _beginthreadex() 함수는 새로 생성된 스레드에 핸들을 반환합니다. 그러나 함수 호출의 실제 반환 형식은 개체 핸들을 예상하는 함수 호출에 사용되기 전에 HANDLE에 형식 캐스팅되어야 하는 uintptr_t입니다. 그림 6-1은 프로그래머의 관점에서 높은 수준의 개요입니다. 수많은 기술 및 구현 세부 사항이 있으며 관심있는 독자는 Russinovich, 솔로몬 및 Ionescu, Windows 내부 : Windows Server 2008 및 Windows Vista를 포함하여 자세히 알아볼 수 있습니다. 위의 예에서 m_socket1 및 m_socket2와 연결된 Win32 이벤트는 AsyncSocket 메서드 ReadIncomingPacket에서 직접 처리됩니다. 이 메서드는 std::bind()를 사용 하 여 함수 개체로 변환 됩니다. 그러나 m_socket3은 명시적으로 정의된 함수 개체인 AnotherEventHandler에서 처리합니다. 스레드를 종료하는 방법에는 여러 가지가 있습니다. 그러나 권장되는 방법은 스레드가 실행하도록 지시된 함수를 종료하는 것입니다. 다음 예제에서는 스레드가 ID를 출력한 다음 종료합니다.

스레드가 종료되면 _beginthread()에 대한 호출로 반환된 핸들이 유효하지 않거나 다시 사용됩니다. 따라서 스레드의 상태를 쿼리하거나 스레드에 대한 핸들이 원래 가리키는 동일한 스레드의 핸들이라고 확신할 수 없습니다. 다음 예제에서는 이 문제를 보여 줍니다. 각 스레드는 이름과 일부 숫자를 출력합니다. 기본 스레드는 첫 번째 스레드가 종료될 때까지 기다립니다. 중대형 소프트웨어에서 이 코드 패턴은 API가 사용되는 모든 곳에서 여러 모듈에서 반복적으로 볼 수 있습니다. _beginthread()를 호출하는 것은 매개 변수를 적게 사용하고 스레드가 종료된 후 핸들을 정리하기 때문에 더 편리해 보이지만 _beginthreadex()를 사용하는 것이 좋습니다. 첫째, AddWaitWait는 함수 개체의 형식인 형식이 전달된 인스턴스화되는 함수 템플릿입니다. 둘째, 이 함수 개체 형식은 AddWaitWait 구현에서 클래스 템플릿인 WFMOHandler의 내부 클래스인 WaitHandler에서 구체적인 데이터 형식을 생성하는 데 사용됩니다. WFMOHandler는 모든 WaitHandler 클래스 인스턴스인스턴스를 균일하게 처리해야 하므로 WaitHandler 클래스 템플릿은 WaitHandlerBase에서 파생됩니다. WaitHandlerBase는 대기 핸들을 저장하고 호출()을 호출하는 순수한 가상 함수를 가지고 있습니다. 대기 핸들 멤버는 API에 전달될 대기 핸들 배열을 생성하는 데 사용되며 해당 핸들이 신호를 받을 때 호출()이 호출됩니다.

Contact us

Get in touch with us!