MFAllocateSerialWorkQueue 함수(mfapi.h)

작업 항목을 직렬화하도록 보장되는 작업 큐를 만듭니다. 직렬 작업 큐는 기존 다중 스레드 작업 큐를 래핑합니다. 직렬 작업 큐는 FIFO(선점) 실행 순서를 적용합니다.

구문

HRESULT MFAllocateSerialWorkQueue(
  [in]  DWORD dwWorkQueue,
  [out] DWORD *pdwWorkQueue
);

매개 변수

[in] dwWorkQueue

기존 작업 큐의 식별자입니다. 다중 스레드 큐 또는 다른 직렬 작업 큐여야 합니다. 다음 중에서 사용할 수 있습니다.

  • 기본 작업 큐(MFASYNC_CALLBACK_QUEUE_STANDARD)
  • 플랫폼 다중 스레드 큐(MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
  • MFLockSharedWorkQueue 함수에서 반환된 다중 스레드 큐입니다.
  • MFAllocateSerialWorkQueue 함수에서 만든 직렬 큐입니다.

[out] pdwWorkQueue

새 직렬 작업 큐에 대한 식별자를 받습니다. 작업 항목을 큐에 대기할 때 이 식별자를 사용합니다.

반환 값

이 함수는 이러한 값 중 하나를 반환할 수 있습니다.

반환 코드 설명
S_OK
함수가 성공했습니다.
E_FAIL
애플리케이션이 최대 작업 큐 수를 초과했습니다.
MF_E_SHUTDOWN
애플리케이션이 MFStartup을 호출하지 않았거나 애플리케이션이 이미 MFShutdown을 호출했습니다.

설명

작업 큐 사용을 마쳤으면 MFUnlockWorkQueue를 호출합니다.

다중 스레드 큐는 스레드 풀을 사용하여 파이프라인의 총 스레드 수를 줄일 수 있습니다. 그러나 작업 항목을 직렬화하지는 않습니다. 직렬 작업 큐를 사용하면 애플리케이션이 자체 작업 항목의 수동 serialization을 수행할 필요 없이 스레드 풀의 이점을 얻을 수 있습니다.

회신 모드

직렬 변환기 큐는 "회신" 모드에서도 작동할 수 있습니다. 호출자의 IMFAsyncCallback::GetParameters 메서드가 MFASYNC_REPLY_CALLBACK 플래그를 반환하는 경우 serializer 큐는 자동으로 다음 작업 항목으로 진행되지 않습니다. 대신 큐는 호출자의 회신을 기다립니다. 호출자는 작업 큐가 Invoke 메서드에 전달하는 비동기 결과 개체를 호출하여 회신 신호를 보냅니다. 다음 코드는 호출자가 작업 큐에 신호를 전송하는 방법을 보여 줍니다.
HRESULT CCallback::Invoke(IMFAsyncResult *pResult)
{
    DoSomeWork();
    
    // Reply to the work queue that you are done.
    MFInvokeCallback(pResult);

    // Note: This call to MFInvokeCallback does not have to occur inside the
    // Invoke method. You could call MFInvokeCallback at a later time. 

    return S_OK;
}
HRESULT CCallback::GetParameters(DWORD *pdwFlags, DWORD *pdwQueue)
{
    *pdwFlags = MFASYNC_REPLY_CALLBACK;
    *pdwQueue = m_QueueId;
    return S_OK;
}

요구 사항

   
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 mfapi.h
DLL Mfplat.dll

참고 항목

미디어 파운데이션 함수

작업 큐 및 스레딩 개선 사항