waitforsingleobject 예제

Tempo de leitura: menos de 1 minuto

0 Flares Filament.io 0 Flares ×

WaitForSingleObject의 가장 큰 이점 또는 사용은 많은 스레드가 사용되고 모든 스레드가 완료되었는지 추적할 필요가 있을 때입니다. 예를 들어 닫는 동안 프로그램이 있을 수 있으며 모든 스레드를 종료하고 모든 파이프, 소켓 등을 중단하지 않고 합법적으로 닫아야 할 수 있습니다. 이러한 경우 WaitForSingleObject를 사용하여 대기를 하고 모든 것이 녹색 신호를 주고 프로그램을 닫으면 종료할 수 있습니다. 다음 코드는 이전 코드와 동일합니다. 그러나이 예제는 WaitForMultipleObjects()를 사용하고 있습니다. _beginthreadex()를 사용하는 다음 예제는 이전 코드와 동일합니다. _beginthreadex()에 의해 생성된 스레드는 CloseHandle()을 호출하여 정리해야 합니다. 따라서 WaitForSingleObject()에 대한 호출은 올바른 핸들을 얻을 수 있습니다: Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 및 Windows Server 2008 R2: dwMilliseconds 값에는 저전력 상태에서 보낸 시간이 포함됩니다. 예를 들어 컴퓨터가 절전 모드인 동안 시간 정수는 계속 카운트다운됩니다.

_beginthreadex()를 호출하는 것은 _beginthread()로 어려움을 피할 수 있습니다. 스레드가 종료되면 _beginthread()에 대한 호출로 반환된 핸들이 유효하지 않거나 다시 사용됩니다. 따라서 스레드의 상태를 쿼리하거나 스레드에 대한 핸들이 원래 가리키는 동일한 스레드의 핸들이라고 확신할 수 없습니다. 다음 예제에서는 이 문제를 보여 줍니다: 각 스레드에는 자체 스택이 있습니다(스레드 대 프로세스 참조). 아래 예제에서 CreateThread() 함수의 2번째 인수인 stackSize 매개 변수를 사용하여 새 스레드 스택의 크기를 바이트로 지정할 수 있습니다. 이 정수 값이 0이면 스레드에는 만드는 스레드와 크기가 같은 스택이 제공됩니다. 스레드를 종료하는 방법에는 여러 가지가 있습니다. 그러나 권장되는 방법은 스레드가 실행하도록 지시된 함수를 종료하는 것입니다. 다음 예제에서는 스레드가 ID를 인쇄한 다음 종료합니다.

이러한 리소스는 핸들의 CloseHandle() 함수를 스레드에 호출하여 해제해야 합니다. 다음 예제에서는 스레드를 만들고 완료될 때까지 기다렸다가 리소스를 해제하는 전체 순서를 보여 줍니다.

Os comentários foram encerrados, mas trackbacks e pingbacks estão abertos.