> ## 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\_\
Type: XTaskQueueHandle

コールバックを送信するキューです。

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

コールバックを送信するポートです。コールバックはワーク ポートまたは完了ポートに割り当てることができます。

*waitHandle*   \_In\_\
Type: HANDLE

監視するハンドルです。

<Note>これは、シグナル状態になったときにコールバックが呼び出されることになる待機ハンドルです。この待機ハンドルは通常、自動リセットまたは手動リセット イベントです。待機ハンドルが手動リセットの場合、イベントがシグナル状態である限り、コールバックは繰り返し呼び出されます。これが望ましくない場合は、コールバック内でイベントをリセットするか、待機コールバックの登録を解除してください。</Note>

*callbackContext*   \_In\_opt\_\
Type: void\*

コールバックに渡される省略可能なコンテキスト ポインターです。

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

コールバック関数へのポインターです。

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

登録トークンです。これを [XTaskQueueUnregisterWaiter](/reference/system/xtaskqueue/functions/xtaskqueueunregisterwaiter) に渡すことで、待機を登録解除できます。

### 戻り値

Type: HRESULT

HRESULT の成功またはエラー コード。

## 解説

<Note>この関数は、時間依存スレッドで呼び出しても安全ではありません。詳細については、[Time-sensitive threads](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)
* [Time-sensitive threads](https://learn.microsoft.com/gaming/gdk/docs/gdk-dev/console-dev/overviews/threads/time-sensitive-threads)

## 関連項目

[XTaskQueue members](/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](/ja-jp/reference/system/xtaskqueue/functions/xtaskqueueunregisterwaiter.md)
- [XTaskQueuePort](/ja-jp/reference/system/xtaskqueue/enums/xtaskqueueport.md)
- [XTaskQueueRegistrationToken](/ja-jp/reference/system/xtaskqueue/structs/xtaskqueueregistrationtoken.md)
- [XTaskQueue](/ja-jp/reference/system/xtaskqueue/xtaskqueue_members.md)
- [GDK 向け Unity C# API ラッパー](/ja-jp/build/gdk-and-engines/unity/unity-api-wrappers.md)
