WinAsyncAPPCIOCP
La fonction WinAsyncAPPCIOCP fournit un point d’entrée asynchrone pour tous les verbes APPC. Utilisez cette fonction au lieu des versions bloquantes des verbes pour permettre la gestion de plusieurs sessions sur le même thread à l’aide de ports d’achèvement d’E/S. Ce verbe est pris en charge uniquement sur Microsoft Windows et utilise des ports d’achèvement d’E/S Win32.
Syntaxe
HANDLE WINAPI WinAsyncAPPCIOCP(
APPC_IOCP_INFO *iocp_handle,
longlpVcb);
Paramètres
iocp_handle
Pointeur vers une structure de APPC_IOCP_INFO utilisée pour transmettre les informations de port d’achèvement des E/S.
lpVcb
Pointeur vers le bloc de contrôle verbe
La structure APPC_IOCP_INFO a le prototype suivant :
APPC_CompletionPort;APPC_NumberOfBytesTransferred;
APPC_CompletionKey;
APPC_pOverlapped;
APPC_CompletionPort
Ce paramètre fourni est le HANDLE retourné par l’appel à la fonction CreateIoCompletionPort lors de la création du port d’achèvement des E/S. Le port d’achèvement des E/S doit être créé avant d’appeler la fonction WinAsyncAPPCIOCP . Une fois le verbe terminé, la bibliothèque APPC appelle la fonction PostQueuedCompletionStatus avec les champs restants dans la structure en tant qu’entrées, et ces champs sont simplement transmis à la fonction GetQueuedCompletionStatus émise par l’application.
APPC_NumberOfBytesTransferred
Ce paramètre fourni est ignoré. Une fois le verbe APPC terminé, la bibliothèque APPC appelle la fonction PostQueuedCompletionStatus avec ce champ comme entrée, et la valeur retournée pour le dwNumberOfBytesTransferred est simplement passée à la fonction GetQueuedCompletionStatus émise par l’application.
APPC_CompletionKey
Ce paramètre fourni est ignoré. Une fois le verbe APPC terminé, la bibliothèque APPC appelle la fonction PostQueuedCompletionStatus avec ce champ en tant qu’entrée, et la valeur retournée pour la dwCompletionKey est simplement transmise à la fonction GetQueuedCompletionStatus émise par l’application.
APPC_pOverlapped
Ce paramètre fourni est ignoré. Une fois le verbe APPC terminé, la bibliothèque APPC appelle la fonction PostQueuedCompletionStatus avec ce champ comme entrée, et la valeur retournée pour l’objet lpOverlapped est simplement transmise à la fonction GetQueuedCompletionStatus émise par l’application.
Valeur renvoyée
La valeur de retour spécifie si la demande de résolution asynchrone a réussi. Si la fonction a réussi, la valeur de retour est un handle de tâche asynchrone. Si la fonction n’a pas réussi, un zéro est retourné.
Lorsque cette fonction retourne avec une valeur réussie, cela n’indique pas que l’appel APPC sera finalement retourné avec succès. Cela indique uniquement qu’il était possible pour la bibliothèque APPC de tenter l’appel APPC de manière asynchrone à l’aide d’un port d’achèvement d’E/S pour la notification.
Remarques
Cette fonction est destinée à être utilisée avec CreateIoCompletionPort et GetQueuedCompletionStatus dans l’API Win32. Ces fonctions sont décrites dans la section « Référence » de la documentation du Kit de développement logiciel (SDK) de plateforme Microsoft.
Pour obtenir un exemple d’utilisation de ce verbe dans les TPs multithreads, consultez l’exemple de TP de réception multithread (MRCVIO situé dans le dossier SNA\MSENDRCV) à l’aide des ports d’achèvement d’E/S inclus dans le Kit de développement logiciel (SDK) Host Integration Server.
Les verbes APPC utilisés dans les conversations de base qui peuvent être bloqués sont les suivants :
-
Les verbes APPC utilisés dans les conversations mappées qui peuvent être bloquées sont les suivants :
-
Lorsque vous utilisez les versions synchrones ou asynchrones d’un verbe, une application ne peut avoir qu’une seule fonction en cours sur une conversation à la fois. Une tentative de lancement d’une deuxième fonction entraîne le code d’erreur AP_CONV_BUSY.
Les exceptions au paragraphe précédent sont RECEIVE_AND_POST, MC_RECEIVE_AND_POST, RECEIVE_AND_WAIT et MC_RECEIVE_AND_WAIT.
Pour permettre l’utilisation complète de la prise en charge asynchrone, les verbes RECEIVE_AND_WAIT et MC_RECEIVE_AND_WAIT émis de manière asynchrone ont été modifiés pour agir comme les verbes RECEIVE_AND_POST et MC_RECEIVE_AND_POST . Plus précisément, bien qu’une version asynchrone de l’un de ces verbes soit en suspens, les verbes suivants peuvent être émis sur la même conversation :
LIBÉRER (AP_ABEND_PROG, AP_ABEND_SVC ou AP_ABEND_TIMER)
-
Cela permet à une application, en particulier une application serveur, d’utiliser une RECEIVE_AND_WAIT asynchrone ou MC_RECEIVE_AND_WAIT pour recevoir des données. Bien que le RECEIVE_AND_POST, MC_RECEIVE_AND_POST, RECEIVE_AND_WAIT ou MC_RECEIVE_AND_WAIT soit exceptionnel, il peut toujours utiliser SEND_ERROR ou MC_SEND_ERROR et REQUEST_TO_SEND ou MC_REQUEST_TO_SEND. Il est recommandé d’utiliser cette fonctionnalité pour une prise en charge asynchrone complète, et en particulier pour la prise en charge de plusieurs conversations sur le même thread.
Une fois l’opération asynchrone terminée, l’application est avertie par le biais de la fonction GetQueuedCompletionStatus . Une fois les E/S terminées, examinez le code de retour principal APPC et le code de retour secondaire dans le bloc de contrôle des verbes à la recherche de conditions d’erreur.