MsgWaitForMultipleObjectsEx 함수(winuser.h)

지정된 개체 중 하나 또는 전부가 신호 상태에 있거나, I/O 완료 루틴 또는 APC(비동기 프로시저 호출)가 스레드에 큐에 대기되거나 시간 제한 간격이 경과할 때까지 기다립니다. 개체의 배열에는 dwWakeMask 매개 변수를 사용하여 지정하는 입력 이벤트 개체가 포함될 수 있습니다.

구문

DWORD MsgWaitForMultipleObjectsEx(
  [in] DWORD        nCount,
  [in] const HANDLE *pHandles,
  [in] DWORD        dwMilliseconds,
  [in] DWORD        dwWakeMask,
  [in] DWORD        dwFlags
);

매개 변수

[in] nCount

pHandles가 가리키는 배열의 개체 핸들 수입니다. 최대 개체 핸들 수는 MAXIMUM_WAIT_OBJECTS 1을 뺀 값입니다. 이 매개 변수에 값이 0이면 함수는 입력 이벤트만 대기합니다.

[in] pHandles

개체 핸들의 배열입니다. 핸들을 지정할 수 있는 개체 형식 목록은 이 항목의 뒷부분에 있는 설명 섹션을 참조하세요. 배열에는 여러 유형의 개체에 대한 핸들이 포함될 수 있습니다. 동일한 핸들의 여러 복사본을 포함하지 않을 수 있습니다.

대기가 보류 중인 동안 이러한 핸들 중 하나가 닫히면 함수의 동작이 정의되지 않습니다.

핸들에는 SYNCHRONIZE 액세스 권한이 있어야 합니다. 자세한 내용은 표준 액세스 권한을 참조하세요.

[in] dwMilliseconds

제한 시간 간격(밀리초)입니다. 0이 아닌 값을 지정하면 지정된 개체가 신호를 받으면 I/O 완료 루틴 또는 APC가 큐에 대기되거나 간격이 경과할 때까지 함수가 대기합니다. dwMilliseconds가 0이면 조건이 충족되지 않으면 함수가 대기 상태를 입력하지 않습니다. 항상 즉시 반환됩니다. dwMillisecondsINFINITE이면 지정된 개체의 신호가 전송되거나 I/O 완료 루틴 또는 APC가 대기 중인 경우에만 함수가 반환됩니다.

Windows XP, Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 및 Windows Server 2008 R2: 절전 상태에서 소요된 시간이 dwMilliseconds 값에 포함됩니다. 예를 들어 컴퓨터가 절전 모드인 동안에도 제한 시간은 계속 카운트다운됩니다.

Windows 8, Windows Server 2012, Windows 8.1, Windows Server 2012 R2, Windows 10 및 Windows Server 2016: 절전 상태에서 소요된 시간이 dwMilliseconds 값에 포함되지 않습니다. 예를 들어 컴퓨터가 절전 모드인 동안에는 제한 시간이 카운트다운되지 않습니다.

[in] dwWakeMask

입력 이벤트 개체 핸들을 개체 핸들의 배열에 추가할 입력 형식입니다. 이 매개 변수는 GetQueueStatusflags 매개 변수에 나열된 값의 조합일 수 있습니다.

[in] dwFlags

대기 유형입니다. 이 매개 변수는 다음 값 중 하나 이상일 수 있습니다.

의미
0
함수는 개체 중 하나가 신호를 받으면 를 반환합니다. 반환 값은 함수의 상태가 반환된 개체를 나타냅니다.
MWMO_ALERTABLE
0x0002
또한 함수는 스레드가 대기 상태인 동안 QueueUserAPC를 사용하여 APC 가 스레드에 큐에 대기된 경우에도 를 반환합니다.
MWMO_INPUTAVAILABLE
0x0004
PeekMessage와 같은 다른 함수에 대한 호출을 사용하여 입력이 표시되었지만 제거되지 않은 경우에도 함수는 큐에 대한 입력이 있는 경우 를 반환합니다.
MWMO_WAITALL
0x0001
함수는 pHandles 배열의 모든 개체에 신호가 전송되고 입력 이벤트가 동시에 수신되면 를 반환합니다.

반환 값

함수가 성공하면 반환 값은 함수가 반환된 이벤트를 나타냅니다. 다음 값 중 하나일 수 있습니다. (WAIT_OBJECT_0 0으로 정의되고 WAIT_ABANDONED_0 0x00000080L로 정의됩니다.

반환 코드/값 설명
에 WAIT_OBJECT_0 (WAIT_OBJECT_0 + nCount - 1)
MWMO_WAITALL 플래그를 사용하는 경우 지정된 범위 내의 반환 값은 지정된 모든 개체의 상태가 신호를 표시한다는 것을 나타냅니다. 그렇지 않으면 반환 값 빼기 WAIT_OBJECT_0 함수가 반환된 개체의 pHandles 배열 인덱스를 나타냅니다.
+ WAIT_OBJECT_0nCount
dwWakeMask 매개 변수에 지정된 형식의 새 입력은 스레드의 입력 큐에서 사용할 수 있습니다. PeekMessage, GetMessage, GetQueueStatusWaitMessage와 같은 함수는 큐의 메시지를 이전 메시지로 표시합니다. 따라서 이러한 함수 중 하나를 호출하면 지정된 형식의 새 입력이 도착할 때까지 MsgWaitForMultipleObjectsEx 에 대한 후속 호출이 반환되지 않습니다.

이 값은 포그라운드 활성화와 같은 스레드의 작업이 필요한 시스템 이벤트가 발생할 때도 반환됩니다. 따라서 적절한 입력을 사용할 수 없고 dwWakeMask가 0으로 설정된 경우에도 MsgWaitForMultipleObjectsEx가 반환할 수 있습니다. 이 경우 GetMessage 또는 PeekMessage 를 호출하여 MsgWaitForMultipleObjectsEx 에 대한 호출을 다시 시도하기 전에 시스템 이벤트를 처리합니다.

에 WAIT_ABANDONED_0 (WAIT_ABANDONED_0 + nCount - 1)
MWMO_WAITALL 플래그를 사용하는 경우 지정된 범위 내의 반환 값은 지정된 모든 개체의 상태가 신호를 받고 하나 이상의 개체가 중단된 뮤텍스 개체임을 나타냅니다. 그렇지 않으면 반환 값 빼기 WAIT_ABANDONED_0 함수가 반환된 중단된 뮤텍스 개체의 pHandles 배열 인덱스를 나타냅니다. 뮤텍스 개체의 소유권은 호출 스레드에 부여되고 뮤텍스는 서명되지 않은 것으로 설정됩니다.

뮤텍스가 영구 상태 정보를 보호하는 경우 일관성을 위해 검사 합니다.

WAIT_IO_COMPLETION
0x000000C0L
스레드에 큐에 대기 중인 하나 이상의 APC(사용자 모드 비동기 프로시저 호출 )로 대기가 종료되었습니다.
WAIT_TIMEOUT
258L
시간 제한 간격이 경과했지만 dwFlagsdwWakeMask 매개 변수로 지정된 조건이 충족되지 않았습니다.
WAIT_FAILED
(DWORD)0xFFFFFFFF
함수가 실패했습니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

MsgWaitForMultipleObjectsEx 함수는 dwWakeMask 및 dwFlags로 지정된 조건이 충족되었는지 여부를 결정합니다. 조건이 충족되지 않으면 대기 조건의 조건이 충족되거나 시간 제한 간격이 경과할 때까지 호출 스레드가 대기 상태로 들어갑니다.

dwFlags가 0이면 이 함수는 개체 중 하나가 신호를 보낼 때까지 인덱스 0부터 시작하여 배열의 핸들을 확인합니다. 여러 개체가 신호를 받으면 함수는 개체가 신호를 받은 배열에서 첫 번째 핸들의 인덱스 를 반환합니다.

스레드가 MWMO_INPUTAVAILABLE 플래그를 사용하지 않는 한 큐를 검사 함수를 호출한 후 메시지 큐에 지정된 형식의 읽지 않은 입력이 있는 경우 MsgWaitForMultipleObjectsEx는 반환되지 않습니다. PeekMessage, GetMessage, GetQueueStatusWaitMessage와 같은 함수가 큐에 검사 입력이 더 이상 새로운 것으로 간주되지 않도록 큐의 상태 정보를 변경하기 때문입니다. msgWaitForMultipleObjectsEx에 대한 후속 호출은 MWMO_INPUTAVAILABLE 플래그를 사용하지 않는 한 지정된 형식의 새 입력이 도착할 때까지 반환되지 않습니다. 이 플래그를 사용하지 않으면 스레드가 큐를 마지막으로 검사하기 전에 수신된 기존 읽지 않은 입력이 무시됩니다.

함수는 일부 유형의 동기화 개체의 상태를 수정합니다. 수정은 신호 상태가 함수가 반환되도록 한 개체 또는 개체에 대해서만 발생합니다. 예를 들어 시스템은 세마포 개체의 수를 하나씩 줄입니다. 자세한 내용은 개별 동기화 개체에 대한 설명서를 참조하세요.

MsgWaitForMultipleObjectsEx 함수는 pHandles 배열에서 다음 개체 형식의 핸들을 지정할 수 있습니다.

  • 변경 알림
  • 콘솔 입력
  • 이벤트
  • 메모리 리소스 알림
  • Mutex
  • 프로세스
  • 세마포
  • 스레드
  • 대기 가능한 타이머

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll

추가 정보

동기화 함수

대기 함수