|
@@ -121,4 +121,48 @@ Dans ces deux fonctions, si \inltype{hFile} a été ouvert avec l'option
|
|
|
\inltype{FILE_FLAG_OVERLAPPED}, le paramètre \inltype{lpOverlapped} doit être
|
|
|
précisé et pointer vers une structure initialisée de type \inltype{OVERLAPPED}.
|
|
|
|
|
|
+%TODO: mieux expliquer
|
|
|
+
|
|
|
+La structure \inltype{OVERLAPPED} peut ensuite être utilisée soit avec
|
|
|
+\inltype{WaitForSingleObject}, soit avec \inltype{WaitForMultipleObjects} et
|
|
|
+fournit ainsi un moyen de passer d'un modèle par disponibilité à un modèle par
|
|
|
+complétion.
|
|
|
+
|
|
|
+Il est possible d'étendre encore le modèle asynchrone en utilisant des
|
|
|
+«completion routines». Il faut alors utiliser la version suivante:
|
|
|
+
|
|
|
+%TODO: https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-readfileex
|
|
|
+\begin{code}{c}{Prototype de la fonction ReadFileEx sur MSDN}
|
|
|
+BOOL ReadFileEx(
|
|
|
+ HANDLE hFile,
|
|
|
+ __out_data_source(FILE)LPVOID lpBuffer,
|
|
|
+ DWORD nNumberOfBytesToRead,
|
|
|
+ LPOVERLAPPED lpOverlapped,
|
|
|
+ LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
|
|
|
+);
|
|
|
+\end{code}
|
|
|
+
|
|
|
+Le paramètre \inltype{lpCompletionRoutine} est un pointeur de fonction du type
|
|
|
+suivant:
|
|
|
+
|
|
|
+%TODO: https://msdn.microsoft.com/en-us/574eccda-03eb-4e8a-9d74-cfaecc7312ce
|
|
|
+\begin{code}{c}{Définition de LPOVERLAPPED\_COMPLETION\_ROUTINE sur MSDN}
|
|
|
+typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE)(
|
|
|
+ _In_ DWORD dwErrorCode,
|
|
|
+ _In_ DWORD dwNumberOfBytesTransfered,
|
|
|
+ _Inout_ LPOVERLAPPED lpOverlapped
|
|
|
+);
|
|
|
+\end{code}
|
|
|
+
|
|
|
+La routine de complétion sera alors appelée dès que l'opération sera terminée et
|
|
|
+que le thread sera dans un état alertable, c'est-à-dire se signalera disponible.
|
|
|
+
|
|
|
+\subsection{IO completion ports}
|
|
|
+
|
|
|
+Les IO completion ports, ou IOCP pour la suite, permettent d'implémenter un
|
|
|
+système similaire à epoll, dans un modèle par complétion.
|
|
|
|
|
|
+En résumé, la gestion des entrées sorties et des erreurs proposées par Windows
|
|
|
+ne respecte absolument pas le principe de moindre surprise, mais les différentes
|
|
|
+alternatives proposées par le système permettent de construire le modèle par
|
|
|
+complétion que nous avons besoin de façon performante.
|