다음을 통해 공유


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는 잠금이 없습니다.

경고 성능 참고:
작업 포트에서 항목을 처리할 때 XTaskQueueDispatch가 소요한 시간은 가변적이며 수행 중인 작업에 따라 달라집니다. 경우에 따라 다른 시스템 작업이 완료될 때까지 기다리는 것을 호출 스레드가 차단할 수 있습니다.

다음 예에서는 XTaskQueueDispatch 함수를 사용하여 작업 큐에서 항목을 처리하는 방법을 보여줍니다.

참고 항목

SubmitCallbackXTaskQueueSubmitCallback 함수에 대한 코드 예제에서 정의된 도우미 함수입니다.

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 콘솔

참고 항목

XTaskQueue 멤버
비동기 프로그래밍 모델
비동기 작업 큐 디자인