XTaskQueueCreateComposite
다른 작업 큐의 포트로 구성된 작업 큐를 만듭니다.
구문
HRESULT XTaskQueueCreateComposite(
XTaskQueuePortHandle workPort,
XTaskQueuePortHandle completionPort,
XTaskQueueHandle* queue
)
매개 변수
workPort _In_
형식: XTaskQueuePortHandle
작업 콜백을 큐에 넣는 데 사용할 포트입니다.
completionPort _In_
형식: XTaskQueuePortHandle
완료 콜백을 큐에 넣는 데 사용할 포트입니다.
queue _Out_
형식: XTaskQueueHandle*
새로 생성된 큐입니다.
반환 값
형식: HRESULT
HRESULT 성공 또는 오류 코드입니다.
설명
참고 항목
이 함수는 시간에 민감한 스레드에서 호출하는 것이 안전하지 않습니다. 자세한 내용은 시간에 민감한 스레드를 참조하세요.
작업 큐는 참조 계산된 개체입니다. XTaskQueueCloseHandle을 호출하여 참조를 릴리스합니다.
작업 큐에는 작업 및 완료 포트가 포함되며, 작업은 어느 포트로도 큐에 넣을 수 있습니다. 각 포트는 고유 디스패치 모드로 구성될 수 있습니다.
대부분의 시나리오에서는 XTaskQueueCreate API를 사용하여 작업 큐를 생성합니다. 하지만 여러 비동기 호출을 하나로 연결할 경우, XTaskQueueCreateComposite를 통해 복합 큐를 생성하는 것이 유용할 수 있습니다. 해당 구현이 작업 큐를 사용하는 다른 API를 호출해야 하는 API를 고려해보세요. 호출자의 완료 스레드에 고정되지 않도록 API의 완료 콜백을 리디렉션해야 할 수 있습니다. 이 경우 해당 작업 및 완료 포트가 다른 큐의 작업 포트로부터 작성되는 복합 작업 큐를 생성할 수 있습니다.
다음 예에서는 복합 작업 큐를 생성합니다.
void CreatingCompositeQueue()
{
XTaskQueueHandle queue;
HRESULT hr = XTaskQueueCreate(
XTaskQueueDispatchMode::ThreadPool,
XTaskQueueDispatchMode::Manual,
&queue);
if (FAILED(hr))
{
printf("failed to create task queue: 0x%x\r\n", hr);
return;
}
XTaskQueuePortHandle workPort;
// Create a composite queue that uses the work port from
// another queue for both work and completion ports.
hr = XTaskQueueGetPort(queue, XTaskQueuePort::Work, &workPort);
if (FAILED(hr))
{
printf("failed to get work port 0x%x\r\n", hr);
XTaskQueueCloseHandle(queue);
return;
}
XTaskQueueHandle compositeQueue;
hr = XTaskQueueCreateComposite(workPort, workPort, &compositeQueue);
if (FAILED(hr))
{
printf("failed to create composiute queue 0x%x\r\n", hr);
XTaskQueueCloseHandle(queue);
return;
}
// Use the queue as needed
SubmitCallbacks(compositeQueue);
// Wait a while for the callbacks to run
Sleep(1000);
XTaskQueueCloseHandle(compositeQueue);
XTaskQueueCloseHandle(queue);
}
요구 사항
헤더: XTaskQueue.h
라이브러리: xgameruntime.lib
지원되는 플랫폼: Windows, Xbox One 패밀리 콘솔 및 Xbox Series 콘솔