Función MFAllocateSerialWorkQueue (mfapi.h)

Crea una cola de trabajo garantizada para serializar elementos de trabajo. La cola de trabajo serie encapsula una cola de trabajo multiproceso existente. La cola de trabajo serie aplica un orden de ejecución primero en salir (FIFO).

Sintaxis

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

Parámetros

[in] dwWorkQueue

Identificador de una cola de trabajo existente. Debe ser una cola multiproceso u otra cola de trabajo serie. Se puede usar cualquiera de las siguientes opciones:

  • Cola de trabajo predeterminada (MFASYNC_CALLBACK_QUEUE_STANDARD)
  • La cola multiproceso de la plataforma (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
  • Una cola multiproceso devuelta por la función MFLockSharedWorkQueue .
  • Una cola serie creada por la función MFAllocateSerialWorkQueue .

[out] pdwWorkQueue

Recibe un identificador para la nueva cola de trabajo serie. Use este identificador al poner en cola elementos de trabajo.

Valor devuelto

Esta función puede devolver uno de estos valores.

Código devuelto Descripción
S_OK
La función se ha realizado correctamente.
E_FAIL
La aplicación superó el número máximo de colas de trabajo.
MF_E_SHUTDOWN
La aplicación no llamó a MFStartup o la aplicación ya ha llamado MFShutdown.

Comentarios

Cuando haya terminado de usar la cola de trabajo, llame a MFUnlockWorkQueue.

Las colas multiproceso usan un grupo de subprocesos, lo que puede reducir el número total de subprocesos de la canalización. Sin embargo, no serializan elementos de trabajo. Una cola de trabajo serie permite a la aplicación obtener las ventajas del grupo de subprocesos, sin necesidad de realizar la serialización manual de sus propios elementos de trabajo.

Modo de respuesta

Una cola de serializador también puede funcionar en modo de "respuesta". Si el método IMFAsyncCallback::GetParameters del autor de la llamada devuelve la marca MFASYNC_REPLY_CALLBACK , la cola del serializador no avanza automáticamente al siguiente elemento de trabajo. En su lugar, la cola espera una respuesta del autor de la llamada. El autor de la llamada señala la respuesta invocando el objeto de resultado asincrónico que la cola de trabajo pasa al método Invoke . En el código siguiente se muestra cómo el autor de la llamada señala la cola de trabajo.
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;
}

Requisitos

   
Cliente mínimo compatible Windows 8 [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2012 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado mfapi.h
Archivo DLL Mfplat.dll

Consulte también

Funciones de Media Foundation

Mejoras en la cola de trabajo y los subprocesos