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 |
---|---|
|
La función se ha realizado correctamente. |
|
La aplicación superó el número máximo de colas de trabajo. |
|
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 |