> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XTaskQueueRegisterWaiter

> XTaskQueueRegisterWaiter

# XTaskQueueRegisterWaiter

작업 큐에 대기 핸들을 등록합니다.

## 구문

```cpp theme={null}
HRESULT XTaskQueueRegisterWaiter(  
         XTaskQueueHandle queue,  
         XTaskQueuePort port,  
         HANDLE waitHandle,  
         void* callbackContext,  
         XTaskQueueCallback* callback,  
         XTaskQueueRegistrationToken* token  
)  
```

### 매개 변수

*queue*   \_In\_\
형식: XTaskQueueHandle

콜백을 제출할 큐입니다.

*port*   \_In\_\
형식: [XTaskQueuePort](/reference/system/xtaskqueue/enums/xtaskqueueport)

콜백을 제출할 포트입니다. 콜백은 작업 또는 완료 포트에 할당할 수 있습니다.

*waitHandle*   \_In\_\
형식: HANDLE

모니터링할 핸들입니다.

<Note>이는 신호를 받을 때 콜백을 호출할 대기 핸들입니다. 대기 핸들은 일반적으로 자동 또는 수동 재설정 이벤트입니다. 대기 핸들이 수동 재설정인 경우 이벤트가 신호를 받는 한 콜백이 반복적으로 호출됩니다. 원하지 않는 동작이라면 콜백 내에서 이벤트를 재설정하거나 대기 콜백의 등록을 해제하세요.</Note>

*callbackContext*   \_In\_opt\_\
형식: void\*

콜백에 전달될 선택적 컨텍스트 포인터입니다.

*callback*   \_In\_\
형식: [XTaskQueueCallback\*](/reference/system/xtaskqueue/functions/xtaskqueuecallback)

콜백 함수에 대한 포인터입니다.

*token*   \_Out\_\
형식: [XTaskQueueRegistrationToken\*](/reference/system/xtaskqueue/structs/xtaskqueueregistrationtoken)

등록 토큰입니다. 대기 등록을 해제하기 위해 [XTaskQueueUnregisterWaiter](/reference/system/xtaskqueue/functions/xtaskqueueunregisterwaiter)에 전달할 수 있습니다.

### 반환 값

형식: HRESULT

HRESULT 성공 또는 오류 코드입니다.

## 설명

<Note>이 함수는 시간에 민감한 스레드에서 호출하기에 안전하지 않습니다. 자세한 내용은 [시간에 민감한 스레드](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)를 참조하세요.</Note>

대기 핸들이 충족되면 작업 큐가 주어진 콜백을 호출합니다. 이는 핸들이 신호를 받는 것에 대한 응답으로 작업 큐에 항목을 추가하는 효율적인 방법을 제공합니다.

다음 예제에서는 Win32 커널 핸들을 작업 큐에 등록합니다. 핸들이 신호를 받으면 콜백이 큐에 제출됩니다. 일반적으로 신호를 위한 자동 재설정 이벤트를 만듭니다. 핸들이 자동 재설정이 아닌 경우 핸들이 신호를 받는 동안 현재 콜백이 완료되면 새 콜백이 제출됩니다.

```cpp theme={null}
void CreatingTaskQueueWaiter()
{
    HANDLE waitEvent = CreateEvent(nullptr, FALSE, FALSE, nullptr);
    if (waitEvent == nullptr)
    {
        printf("Error creating wait handle: %d\r\n", GetLastError());
        return;
    }

    XTaskQueueHandle queue;

    HRESULT hr = XTaskQueueCreate(
        XTaskQueueDispatchMode::ThreadPool,
        XTaskQueueDispatchMode::ThreadPool, 
        &queue);

    if (FAILED(hr))
    {
        printf("Error creating task queue: %x\n", hr);
        CloseHandle(waitEvent);
        return;
    }

    auto callback = [](void*, bool)
    {
        printf("Callback invoked.\r\n");
    };

    XTaskQueueRegistrationToken token;

    hr = XTaskQueueRegisterWaiter(
        queue, 
        XTaskQueuePort::Completion, 
        waitEvent, 
        nullptr, 
        callback, 
        &token);

    if (FAILED(hr))
    {
        printf("Error registering task queue waiter: %x\n", hr);
        CloseHandle(waitEvent);
        XTaskQueueCloseHandle(queue);
        return;
    }

    // Now, whenever our wait event becomes signaled the callback will be called.
    for (uint32_t i = 0; i < 5; i++)
    {
        SetEvent(waitEvent);
        Sleep(100);
    }

    // Note: unregistering the waiter is optional
    XTaskQueueUnregisterWaiter(queue, token);
    XTaskQueueCloseHandle(queue);
    CloseHandle(waitEvent);
}
```

## 요구 사항

**헤더:** XTaskQueue.h

**라이브러리:** xgameruntime.lib

**지원 플랫폼:** Windows, XBOX One 제품군 콘솔 및 XBOX Series 콘솔

## 개념 문서

* [XTaskQueue 라이브러리 개요](/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [시간에 민감한 스레드](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## 함께 보기

[XTaskQueue 멤버](/reference/system/xtaskqueue/xtaskqueue_members)\
[비동기 프로그래밍 모델](/build/core-features/common/async/async-programming-model)\
[비동기 작업 큐 디자인](/build/core-features/common/async/async-task-queue-design)


## Related topics

- [XTaskQueueUnregisterWaiter](/ko/reference/system/xtaskqueue/functions/xtaskqueueunregisterwaiter.md)
- [XTaskQueuePort](/ko/reference/system/xtaskqueue/enums/xtaskqueueport.md)
- [XTaskQueueRegistrationToken](/ko/reference/system/xtaskqueue/structs/xtaskqueueregistrationtoken.md)
- [XTaskQueue](/ko/reference/system/xtaskqueue/xtaskqueue_members.md)
- [GDK용 Unity C# API 래퍼](/ko/build/gdk-and-engines/unity/unity-api-wrappers.md)
