Função MFAllocateSerialWorkQueue (mfapi.h)

Cria uma fila de trabalho que tem a garantia de serializar itens de trabalho. A fila de trabalho serial encapsula uma fila de trabalho multithread existente. A fila de trabalho serial impõe uma ordem de execução FIFO (primeiro a entrar, primeiro a sair).

Sintaxe

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

Parâmetros

[in] dwWorkQueue

O identificador de uma fila de trabalho existente. Deve ser uma fila multithread ou outra fila de trabalho serial. Qualquer uma das seguintes opções pode ser usada:

  • A fila de trabalho padrão (MFASYNC_CALLBACK_QUEUE_STANDARD)
  • A fila multithread da plataforma (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
  • Uma fila multithread retornada pela função MFLockSharedWorkQueue .
  • Uma fila serial criada pela função MFAllocateSerialWorkQueue .

[out] pdwWorkQueue

Recebe um identificador para a nova fila de trabalho serial. Use esse identificador ao enfileirar itens de trabalho.

Valor retornado

Essa função pode retornar um desses valores.

Código de retorno Descrição
S_OK
A função foi bem-sucedida.
E_FAIL
O aplicativo excedeu o número máximo de filas de trabalho.
MF_E_SHUTDOWN
O aplicativo não chamou MFStartup ou o aplicativo já chamou MFShutdown.

Comentários

Quando terminar de usar a fila de trabalho, chame MFUnlockWorkQueue.

As filas multithreaded usam um pool de threads, o que pode reduzir o número total de threads no pipeline. No entanto, eles não serializam itens de trabalho. Uma fila de trabalho serial permite que o aplicativo obtenha os benefícios do pool de threads, sem a necessidade de executar a serialização manual de seus próprios itens de trabalho.

Modo de Resposta

Uma fila de serializadores também pode funcionar no modo de "resposta". Se o método IMFAsyncCallback::GetParameters do chamador retornar o sinalizador MFASYNC_REPLY_CALLBACK , a fila do serializador não avançará automaticamente para o próximo item de trabalho. Em vez disso, a fila aguarda uma resposta do chamador. O chamador sinaliza a resposta invocando o objeto de resultado assíncrono que a fila de trabalho passa para o método Invoke . O código a seguir ilustra como o chamador sinaliza a fila de trabalho.
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 com suporte Windows 8 [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2012 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho mfapi.h
DLL Mfplat.dll

Confira também

Funções do Media Foundation

Melhorias na fila de trabalho e no threading