Dans Windows, async opérations sont effectuées par une opération de fichier, pas de descripteur. Il y a plusieurs façons d'attendre sur les opérations de fichier se termine de façon asynchrone.
Par exemple, si vous souhaitez savoir quand les données sont disponibles sur une socket réseau, numéro un async demande de lecture sur la socket et lorsqu'elle est terminée, les données étaient disponibles et ont été récupérés.
Dans Win32, des opérations asynchrones utiliser l' OVERLAPPED
structure pour contenir de l'état au sujet d'une exceptionnelle IO opération.
- Associer les fichiers avec un IO Achèvement de Port et d'expédition async IO demandes. Lorsqu'une opération est terminée, elle va mettre un message d'achèvement sur la file d'attente qui votre thread(s) peut attendre et récupérer à mesure qu'ils arrivent. Vous pouvez aussi mettre défini par l'utilisateur des messages dans la file d'attente. Il n'y a pas de limite au nombre de fichiers ou de messages en file d'attente peut être utilisé avec un port de fin d'
- Envoi de chaque opération e / s avec un événement. L'événement associé à une opération deviendra signalé (satisfaire une attente) quand il se termine. Utiliser
WaitForMultipleObjects
attendre sur tous les événements à la fois. Ceci a l'inconvénient de ne pouvoir attendre sur MAXIMUM_WAIT_OBJECTS
objets à la fois (64). Vous pouvez aussi attendre sur les autres types d'événements en même temps (processus/thread résiliation, mutex, les événements, les sémaphores)
- L'utilisation d'un pool de threads. Le pool de threads peut prendre un nombre illimité d'objets et d'opérations sur les fichiers d'attendre et d'exécuter une fonction définie par l'utilisateur lors de l'achèvement de chaque.
- Utiliser
ReadFileEx
et WriteFileEx
file d'attente pour les Appels de Procédure Asynchrone (Apc) pour le thread appelant et de l' SleepEx
(ou WaitFor{Single|Multiple}ObjectsEx
) avec Alertable TRUE
, pour recevoir un message de notification pour chaque opération, lorsqu'elle est terminée. Cette méthode est similaire à un IO port d'achèvement, mais ne fonctionne que pour un seul thread.
Le noyau de Windows NT ne fait pas de distinction entre le connecteur, fichier du disque, pipe, etc. les opérations de fichiers en interne: l'ensemble de ces options va fonctionner avec tous les types de fichiers.