InitOnceExecuteOnce 함수(synchapi.h)

여러 스레드가 동일한 일회성 초기화 블록을 전달하는 InitOnceExecuteOnce를 호출하는 경우 하나의 스레드만 InitFn에서 지정한 콜백 함수를 실행합니다. 나머지 스레드는 콜백 함수가 완료될 때까지 차단됩니다. 콜백 함수가 성공 여부를 나타내기 위해 TRUE 를 반환하는 경우 InitOnceExecuteOnce는 TRUE 를 한 번에 모든 호출자에게 반환합니다. 그러나 콜백이 실패를 나타내기 위해 FALSE 를 반환하는 경우 InitOnceExecuteOnce는 콜백 함수를 실행한 단일 스레드에만 FALSE 를 반환합니다. 동시에 차단된 나머지 스레드 중 하나가 차단을 해제하고 InitFn을 다시 실행합니다. 따라서 InitFn 이 간헐적으로 실패하고 재시도를 원하는 시나리오에서는 TRUE 가 반환될 때까지 모든 스레드가 InitOnceExecuteOnce를 계속 호출해야 합니다.

구문

BOOL InitOnceExecuteOnce(
  [in, out]           PINIT_ONCE    InitOnce,
  [in]                PINIT_ONCE_FN InitFn,
  [in, optional]      PVOID         Parameter,
  [in, out, optional] LPVOID        *Context
);

매개 변수

[in, out] InitOnce

일회성 초기화 구조에 대한 포인터입니다.

[in] InitFn

애플리케이션에서 정의한 InitOnceCallback 함수에 대한 포인터입니다.

[in, optional] Parameter

콜백 함수에 전달할 매개 변수입니다.

[in, out, optional] Context

성공 시 일회성 초기화 구조로 저장된 데이터를 수신하는 매개 변수입니다. 데이터의 하위 순서 INIT_ONCE_CTX_RESERVED_BITS 비트는 항상 0입니다. 컨텍스트가 데이터 구조를 가리키는 경우 데이터 구조는 DWORD 정렬되어야 합니다. Arm32 코드 포인터에는 항상 가장 중요한 비트 집합이 있으므로 컨텍스트가 Arm32의 코드 포인터가 아니어야 합니다. 자세한 내용은 Arm32 ABI를 참조하세요.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

이 함수는 동기 일회성 초기화에 사용됩니다. 비동기 일회성 초기화의 경우 INIT_ONCE_ASYNC 플래그와 함께 InitOnceBeginInitialize 함수를 사용합니다.

한 번에 하나의 스레드만 InitFn에서 지정한 콜백 함수를 실행할 수 있습니다. 콜백이 완료될 때까지 동일한 일회성 초기화 구조 블록을 지정하는 다른 스레드입니다.

이 함수를 사용하는 애플리케이션을 컴파일하려면 _WIN32_WINNT 0x0600 이상으로 정의합니다. 자세한 내용은 Windows 헤더 사용을 참조하세요.

예제

이 함수를 사용하는 예제는 One-Time 초기화 사용을 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2008 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 synchapi.h(Windows 7의 Windows.h 포함, Windows Server 2008 Windows Server 2008 R2)
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

InitOnceCallback

InitOnceInitialize

일회성 초기화

동기화 함수