Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Crée une file d’attente de travail 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 de premier entré et 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. Vous pouvez utiliser l’une des options suivantes :
- File d’attente de travail par défaut (MFASYNC_CALLBACK_QUEUE_STANDARD)
- File d’attente multithread de 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 des éléments de travail.
Valeur retournée
Cette fonction peut retourner l’une de ces valeurs.
| Code de retour | Descriptif |
|---|---|
|
La fonction a réussi. |
|
L’application a dépassé le nombre maximal de files d’attente de travail. |
|
L’application n’a pas appelé MFStartup, ou l’application a déjà appelé MFShutdown. |
Remarques
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 à effectuer la sérialisation manuelle de ses propres éléments de travail.
Mode 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 du 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;
}
Spécifications
| Requirement | Valeur |
|---|---|
| Client minimum requis | Windows 8 [applications de bureau | Applications UWP] |
| Serveur minimal pris en charge | Windows Server 2012 [applications de bureau | Applications UWP] |
| plateforme cible | Fenêtres |
| Header | mfapi.h |
| Library | Mfplat.lib |
| DLL | Mfplat.dll |
Voir aussi
Améliorations apportées à la file d’attente de travail et au thread