Browse Source

chapters/windows_eventloop: ajout de overlapped/iocp

Alexandre Janniaux 6 years ago
parent
commit
c0ddd25a87
1 changed files with 44 additions and 0 deletions
  1. 44 0
      chapters/windows_eventloop.tex

+ 44 - 0
chapters/windows_eventloop.tex

@@ -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.