Condividi tramite


Funzione MFAllocateSerialWorkQueue (mfapi.h)

Crea una coda di lavoro garantita per serializzare gli elementi di lavoro. La coda di lavoro seriale esegue il wrapping di una coda di lavoro multithreaded esistente. La coda di lavoro seriale applica un ordine di esecuzione FIFO (First-Out First-Out).

Sintassi

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

Parametri

[in] dwWorkQueue

Identificatore di una coda di lavoro esistente. Deve essere una coda multithreading o un'altra coda di lavoro seriale. È possibile usare uno degli elementi seguenti:

  • Coda di lavoro predefinita (MFASYNC_CALLBACK_QUEUE_STANDARD)
  • Coda multithreaded della piattaforma (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
  • Una coda multithreaded restituita dalla funzione MFLockSharedWorkQueue .
  • Coda seriale creata dalla funzione MFAllocateSerialWorkQueue .

[out] pdwWorkQueue

Riceve un identificatore per la nuova coda di lavoro seriale. Usare questo identificatore durante l'accodamento degli elementi di lavoro.

Valore restituito

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
Funzione completata.
E_FAIL
L'applicazione ha superato il numero massimo di code di lavoro.
MF_E_SHUTDOWN
L'applicazione non ha chiamato MFStartup o l'applicazione ha già chiamato MFShutdown.

Commenti

Al termine dell'uso della coda di lavoro, chiamare MFUnlockWorkQueue.

Le code multithreaded usano un pool di thread, che può ridurre il numero totale di thread nella pipeline. Tuttavia, non serializzano gli elementi di lavoro. Una coda di lavoro seriale consente all'applicazione di ottenere i vantaggi del pool di thread, senza dover eseguire la serializzazione manuale dei propri elementi di lavoro.

Modalità risposta

Una coda serializzatore può funzionare anche in modalità "risposta". Se il metodo FMAsyncCallback::GetParameters restituisce il flag MFASYNC_REPLY_CALLBACK , la coda serializzatore non passa automaticamente all'elemento di lavoro successivo. La coda attende invece una risposta dal chiamante. Il chiamante segnala la risposta richiamando l'oggetto risultato asincrono passato al metodo Invoke . Il codice seguente illustra come il chiamante segnali la coda di lavoro.
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;
}

Requisiti

   
Client minimo supportato Windows 8 [app desktop | App UWP]
Server minimo supportato Windows Server 2012 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione mfapi.h
DLL Mfplat.dll

Vedi anche

Funzioni di Media Foundation

Miglioramenti della coda di lavoro e del threading