2008-10-17 7 views
4

MSDN 함수가 실패하면 반환 값은 WAIT_FAILED됩니다왜 WAIT_FAILED

말한다 반환의 WaitForSingleObject 것이다. 확장 된 오류 정보를 얻으려면 GetLastError를 호출하십시오.

코드는 다음과 같습니다

HANDLE  m_mutex_handle; /**< m_mutex_handle. The handle to the created mutex. */ 
m_mutex_handle = ::CreateMutex(0, false, NULL); 
::WaitForSingleObject(m_mutex_handle, INFINITE); 

그러나이 일어날 수있는 이유는?

+2

그래서 GetLastError()는 무엇을 반환합니까? 그것은 보통 당신에게 꽤 좋은 단서를줍니다. – Ferruccio

답변

4

가짜 개체를 전달하면 문제가 발생할 수 있습니다.

+0

_ 가짜 _ 가짜 객체를 전달하면 정의되지 않은 동작이 발생할 수도 있지만 함수가 이러한 경우를 확인하는 경우 일 수 있습니다. :-P –

1

핸들이 대기중인 동안 핸들을 닫으면 정의되지 않은 동작이 발생할 수도 있습니다.

7

오브젝트에 대한 SYNCHRONIZE 특권이 없으면 기다릴 수 없습니다. WAIT_FAILED가 리턴됩니다.

1

스레드 핸들 배열을 전달할 때 WaitForMultipleObjects에서 WAIT_FAILED를 받았는데 그 중 하나가 의사 핸들이었습니다. 이제까지 불멸의 Raymond Chen이 설명하고 픽스를 제공했습니다 : https://blogs.msdn.microsoft.com/oldnewthing/20141015-00/?p=43843

+0

이 질문을보고 있다면 위에 링크 된 Raymond Chen의 블로그 게시물을 읽어야합니다. 기본적으로 모든 핸들이 핸들이 아니라 일부는 특별한 자리 표시자인 'psuedo handles'이며 절대 값이 아닙니다. –