XTaskQueueDispatch
지정된 포트에 대한 작업 큐에서 항목을 처리합니다.
구문
bool XTaskQueueDispatch(
XTaskQueueHandle queue,
XTaskQueuePort port,
uint32_t timeoutInMs
)
매개 변수
queue _In_
형식: XTaskQueueHandle
작업을 디스패치할 큐입니다.
port _In_
형식: XTaskQueuePort
디스패치할 포트입니다.
timeoutInMs _In_
형식: uint32_t
false를 반환하기 전 작업이 도착할 때까지 기다릴 시간(밀리초)입니다. 영구적으로 대기하려면 INFINITE를 전달할 수 있습니다.
반환 값
형식: bool
이 함수가 호출을 디스패치한 경우 true를 반환하고, 그렇지 않으면 false 를 반환합니다. 이 함수는 또한 큐가 종료된 경우 INFINITE가 시간 제한 값으로 전달되었더라도 false를 반환합니다.
비고
큐에 항목이 도착할 때까지 XTaskQueueDispatch가 대기하도록 만드는 시간 제한 값을 전달할 수 있습니다.
XTaskQueueDispatchMode::ThreadPool, XTaskQueueDispatchMode::SerializedThreadPool 또는 XTaskQueueDispatchMode::Immediate로 작업 큐 포트가 생성된 경우, 콜백을 자동으로 디스패치할 디스패치 모드입니다. 수동 디스패치 포트의 경우 XTaskQueueDispatch를 호출해야 합니다. XTaskQueueDispatch는 모든 디스패치 모드에 대해 호출될 수 있지만, 호출은 항상 XTaskQueueDispatch를 호출하는 스레드에서만 디스패치됩니다.
성능 참고:
큐에 항목을 추가하려면 업스트림 코드의 성능 요구 사항을 충족시키기 위해 잠금 및 대기가 없어야 합니다. 다음 API는 잠금이 없습니다.
- XTaskQueueSubmitCallback
- XTaskQueueSubmitDelayedCallback
- XTaskQueueDispatch, timeoutInMs에 대해 0이 전달된 경우
성능 참고:
작업 포트에서 항목을 처리할 때 XTaskQueueDispatch가 소요한 시간은 가변적이며 수행 중인 작업에 따라 달라집니다.
경우에 따라 다른 시스템 작업이 완료될 때까지 기다리는 것을 호출 스레드가 차단할 수 있습니다.
다음 예에서는 XTaskQueueDispatch 함수를 사용하여 작업 큐에서 항목을 처리하는 방법을 보여줍니다.
참고 항목
SubmitCallback은 XTaskQueueSubmitCallback 함수에 대한 코드 예제에서 정의된 도우미 함수입니다.
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 콘솔