> ## 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.

# XTaskQueueCreate

> XTaskQueueCreate

# XTaskQueueCreate

호출을 큐에 넣고 디스패치하는 데 사용할 수 있는 작업 큐를 만듭니다.

## 구문

```cpp theme={null}
HRESULT XTaskQueueCreate(  
         XTaskQueueDispatchMode workDispatchMode,  
         XTaskQueueDispatchMode completionDispatchMode,  
         XTaskQueueHandle* queue  
)  
```

### 매개 변수

*workDispatchMode*   \_In\_\
형식: [XTaskQueueDispatchMode](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

큐의 "work" 포트에 대한 디스패치 모드입니다.

*completionDispatchMode*   \_In\_\
형식: [XTaskQueueDispatchMode](/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode)

큐의 "completion" 포트에 대한 디스패치 모드입니다.

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

새로 만든 큐입니다.

### 반환 값

형식: HRESULT

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

## 설명

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

작업 큐는 참조 횟수가 계산되는 개체입니다. 참조를 해제하려면 [XTaskQueueCloseHandle](/reference/system/xtaskqueue/functions/xtaskqueueclosehandle)을 호출합니다.

작업 큐에는 작업 포트와 완료 포트가 있으며 두 포트 중 어느 쪽에도 작업을 큐에 넣을 수 있습니다. 각 포트는 고유한 디스패치 모드로 구성할 수 있습니다.

대부분의 시나리오에서는 **XTaskQueueCreate** API를 사용하여 작업 큐를 만듭니다. 그러나 여러 비동기 호출을 체이닝하는 경우에는 [XTaskQueueCreateComposite](/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite)를 통해 복합 큐를 만드는 것이 유용할 때가 있습니다. 구현에서 작업 큐를 사용하는 다른 API를 호출해야 하는 API를 고려해 보세요. API의 완료 콜백을 리디렉션하여 호출자의 완료 스레드를 묶지 않도록 할 수 있습니다. 이 경우 다른 큐의 작업 포트에서 작업 및 완료 포트가 빌드된 복합 작업 큐를 만들 수 있습니다.

다음 예제에서는 시스템 스레드 풀에서 작업 및 완료 콜백을 모두 디스패치하는 작업 큐를 만듭니다.

<Note>**SubmitCallback**은 [XTaskQueueSubmitCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback) 함수에 대한 코드 예제에서 정의된 도우미 함수입니다.</Note>

```cpp theme={null}
void CreatingTaskQueue()
{
    XTaskQueueHandle queue;
    HRESULT hr = XTaskQueueCreate(XTaskQueueDispatchMode::ThreadPool, XTaskQueueDispatchMode::ThreadPool, &queue);
    if (FAILED(hr))
    {
        printf("Creating queue failed: 0x%x\r\n", hr);
        return;
    }

    SubmitCallbacks(queue);

    // Wait a while for the callbacks to run
    Sleep(1000);

    XTaskQueueTerminate(queue, true, nullptr, nullptr);
}
```

다음 예제에서는 수동으로 펌프되는 작업 큐를 만듭니다. 작업 및 완료 포트 모두에 대한 호출을 디스패치하는 두 개의 STL 스레드를 만듭니다.

<Note>**SubmitCallback**은 [XTaskQueueSubmitCallback](/reference/system/xtaskqueue/functions/xtaskqueuesubmitcallback) 함수에 대한 코드 예제에서 정의된 도우미 함수입니다.</Note>

```cpp theme={null}
void CreatingTaskQueueWithManualThreads()
{
    // Create a manual task queue
    XTaskQueueHandle queue;
    HRESULT hr = XTaskQueueCreate(XTaskQueueDispatchMode::Manual, XTaskQueueDispatchMode::Manual, &queue);
    if (FAILED(hr))
    {
        printf("Creating queue failed: 0x%x\r\n", hr);
        return;
    }

    // We create threads to pump the queue: one for the work port
    // and one for the completion port.
    std::thread workThread([queue]
    {
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Work, INFINITE));
    });

    std::thread completionThread([queue]
    {
        while (XTaskQueueDispatch(queue, XTaskQueuePort::Completion, INFINITE));
    });

    SubmitCallbacks(queue);

    // Wait a while for the callbacks to run
    Sleep(1000);

    // Terminating the queue will cause a waiting DispatchTaskQueue to return
    // false.  
    XTaskQueueTerminate(queue, true, nullptr, nullptr);

    workThread.join();
    completionThread.join();
}
```

## 요구 사항

**헤더:** XTaskQueue.h

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

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

## 개념 문서

* [작업 큐 만들기](/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue)
* [XTaskQueue 라이브러리 개요](/build/core-features/common/async/async-libraries/async-library-xtaskqueue)
* [비동기 프로그래밍 모델](/build/core-features/common/async/async-programming-model)
* [비동기 프로그래밍 디자인 목표 및 개선 사항](/build/core-features/common/async/async-whitepaper)
* [시간에 민감한 스레드](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

- [XTaskQueueCreateComposite](/ko/reference/system/xtaskqueue/functions/xtaskqueuecreatecomposite.md)
- [작업 큐 만들기 예제](/ko/build/core-features/common/async/async-libraries/async-library-xtaskqueue-example-create-task-queue.md)
- [XTaskQueue](/ko/reference/system/xtaskqueue/xtaskqueue_members.md)
- [XTaskQueueDispatchMode](/ko/reference/system/xtaskqueue/enums/xtaskqueuedispatchmode.md)
- [PlayFab Unified SDK에서 비동기 호출 수행](/ko/services/playfab/sdks/unified-sdk/async-model.md)
