Partager via


Fonction MFAllocateSerialWorkQueue (mfapi.h)

Crée une file d’attente de travail qui est garantie pour sérialiser les éléments de travail. La file d’attente de travail série encapsule une file d’attente de travail multithread existante. La file d’attente de travail série applique un ordre d’exécution premier entré, premier sorti (FIFO).

Syntaxe

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

Paramètres

[in] dwWorkQueue

Identificateur d’une file d’attente de travail existante. Il doit s’agir d’une file d’attente multithread ou d’une autre file d’attente de travail série. L’un des éléments suivants peut être utilisé :

  • File d’attente de travail par défaut (MFASYNC_CALLBACK_QUEUE_STANDARD)
  • File d’attente multithread de la plateforme (MFASYNC_CALLBACK_QUEUE_MULTITHREADED)
  • File d’attente multithread retournée par la fonction MFLockSharedWorkQueue .
  • File d’attente série créée par la fonction MFAllocateSerialWorkQueue .

[out] pdwWorkQueue

Reçoit un identificateur pour la nouvelle file d’attente de travail série. Utilisez cet identificateur lors de la mise en file d’attente d’éléments de travail.

Valeur retournée

Cette fonction peut retourner l’une de ces valeurs.

Code de retour Description
S_OK
La fonction a réussi.
E_FAIL
L’application a dépassé le nombre maximal de files d’attente de travail.
MF_E_SHUTDOWN
L’application n’a pas appelé MFStartup, ou l’application a déjà appelé MFShutdown.

Notes

Lorsque vous avez terminé d’utiliser la file d’attente de travail, appelez MFUnlockWorkQueue.

Les files d’attente multithread utilisent un pool de threads, ce qui peut réduire le nombre total de threads dans le pipeline. Toutefois, ils ne sérialisent pas les éléments de travail. Une file d’attente de travail série permet à l’application d’obtenir les avantages du pool de threads, sans avoir besoin d’effectuer une sérialisation manuelle de ses propres éléments de travail.

Mode de réponse

Une file d’attente de sérialiseur peut également fonctionner en mode « réponse ». Si la méthode IMFAsyncCallback::GetParameters de l’appelant retourne l’indicateur MFASYNC_REPLY_CALLBACK, la file d’attente de sérialiseur ne passe pas automatiquement à l’élément de travail suivant. Au lieu de cela, la file d’attente attend une réponse de l’appelant. L’appelant signale la réponse en appelant l’objet de résultat asynchrone que la file d’attente de travail transmet à la méthode Invoke . Le code suivant illustre la façon dont l’appelant signale la file d’attente de travail.
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;
}

Configuration requise

   
Client minimal pris en charge Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2012 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête mfapi.h
DLL Mfplat.dll

Voir aussi

Fonctions Media Foundation

Améliorations apportées à la file d’attente de travail et au threading