Partager via


WPUQueueApc, fonction (ws2spi.h)

La fonction WPUQueueApc met en file d’attente un appel de procédure asynchrone en mode utilisateur (APC) vers le thread spécifié afin de faciliter l’appel de routines d’achèvement d’E/S superposées.

Syntaxe

int WPUQueueApc(
  [in]  LPWSATHREADID lpThreadId,
  [in]  LPWSAUSERAPC  lpfnUserApc,
  [in]  DWORD_PTR     dwContext,
  [out] LPINT         lpErrno
);

Paramètres

[in] lpThreadId

Pointeur vers une structure WSATHREADID qui identifie le contexte de thread. Un pointeur vers cette structure est fourni au fournisseur de services par l'Ws2_32.dll en tant que paramètre d’entrée vers une opération qui se chevauche. Le fournisseur doit stocker la structure WSATHREADID localement et fournir un pointeur vers ce magasin local. La copie locale de WSATHREADID n’est plus nécessaire une fois que WPUQueueApc est retourné.

[in] lpfnUserApc

Pointeur vers la fonction APC à appeler.

[in] dwContext

Valeur de contexte 32 bits qui est ensuite fournie en tant que paramètre d’entrée à la fonction APC.

[out] lpErrno

Pointeur vers le code d’erreur.

Valeur retournée

Si aucune erreur ne se produit, WPUQueueApc retourne zéro et met en file d’attente la routine d’achèvement pour le thread spécifié. Sinon, elle retourne SOCKET_ERROR et un code d’erreur spécifique est disponible dans lpErrno.

Code d’erreur Meaning
WSAEFAULT
Le paramètre dwThreadId ne spécifie pas de thread valide.
 
 

Remarques

Cette fonction met en file d’attente une fonction APC sur le thread spécifié. Sous Windows, cette opération est effectuée à l’aide d’un appel de procédure asynchrone en mode utilisateur (APC). L’APC s’exécute uniquement lorsque le thread spécifié est bloqué dans une attente alertable et qu’un rappel est effectué directement. Cet appel est sécurisé pour une utilisation dans un contexte d’interruption.

LPWSAUSERAPC est défini comme suit :

typedef void ( CALLBACK FAR * LPWSAUSERAPC )( DWORD dwContext );

Étant donné que le mécanisme APC ne prend en charge qu’une seule valeur de contexte, lpfnUserApc lui-même ne peut pas être la routine d’achèvement spécifiée par le client, ce qui implique davantage de paramètres. Le fournisseur de services doit plutôt fournir un pointeur vers sa propre fonction APC qui utilise la valeur dwContext fournie pour accéder aux informations de résultat nécessaires pour l’opération qui se chevauche, puis appelle la routine d’achèvement spécifiée par le client.

Pour les fournisseurs de services où un composant en mode utilisateur implémente des E/S superposées, une utilisation classique du mécanisme APC est la suivante.

    - Une fois l’opération d’E/S terminée, le fournisseur alloue une petite mémoire tampon et le packe avec un pointeur vers la procédure d’achèvement fournie par le client et les valeurs de paramètre à passer à la procédure. - Il met en file d’attente un APC, en spécifiant le pointeur vers la mémoire tampon comme valeur dwContext et sa propre procédure intermédiaire en tant que procédure cible lpfnUserApc. - Lorsque le thread cible entre finalement dans l’état d’attente alertable, la procédure intermédiaire du fournisseur de services est appelée dans le contexte de thread approprié. - La procédure intermédiaire décompresse simplement les paramètres, libère la mémoire tampon et appelle la procédure d’achèvement fournie par le client.

Spécifications

Requirement Valeur
Client minimum requis Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
plateforme cible Fenêtres
Header ws2spi.h

Voir aussi

WSATHREADID

LPWSPIoctl

LPWSPRecv

LPWSPRecvFrom

LPWSPSend

LPWSPSendTo