Browse Source

chapters/windows_eventloop: add doc link in footnote

Alexandre Janniaux 6 years ago
parent
commit
8e559c4164
1 changed files with 33 additions and 23 deletions
  1. 33 23
      chapters/windows_eventloop.tex

+ 33 - 23
chapters/windows_eventloop.tex

@@ -9,9 +9,9 @@ ou IO completion ports, en proposant une implémentation de
 \subsection{poll, select}
 \subsection{poll, select}
 
 
 Comme dans la partie précédente, on dispose d'une fonction \inltype{select}
 Comme dans la partie précédente, on dispose d'une fonction \inltype{select}
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-select}}
 capable d'indiquer l'état de chacun des sockets décrits dans un tableau.
 capable d'indiquer l'état de chacun des sockets décrits dans un tableau.
 
 
-% TODO: https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-select
 \begin{code}{c}{Prototype de la fonction select}
 \begin{code}{c}{Prototype de la fonction select}
 int WSAAPI select(
 int WSAAPI select(
   int           nfds,
   int           nfds,
@@ -26,7 +26,9 @@ Malheureusement celle-ci ne peut être utilisée que sur des sockets venant de
 l'API winsock. Il nous sera donc impossible de l'utiliser pour construire la
 l'API winsock. Il nous sera donc impossible de l'utiliser pour construire la
 boucle événementielle sans changer d'IPC.
 boucle événementielle sans changer d'IPC.
 
 
-De même, \inltype{poll} n'existe pas comme sous Linux et il s'agit d'une
+De même, \inltype{poll}
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/api/winsock2/nf-winsock2-wsapoll}}
+n'existe pas comme sous Linux et il s'agit d'une
 fonction winsock.
 fonction winsock.
 
 
 \begin{code}{c}{Prototype de la fonction WSAPoll}
 \begin{code}{c}{Prototype de la fonction WSAPoll}
@@ -46,7 +48,9 @@ Pour obtenir le même effet que les fonctions sous Linux, sur des
 \inltype{HANDLE} de façon générique, Windows propose une famille de fonctions de
 \inltype{HANDLE} de façon générique, Windows propose une famille de fonctions de
 la forme \inltype{WaitFor*}.
 la forme \inltype{WaitFor*}.
 
 
-D'abord, \inltype{WaitForSingleObject} attend que le \inltype{HANDLE} soit
+D'abord, \inltype{WaitForSingleObject}
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-waitforsingleobject}}
+attend que le \inltype{HANDLE} soit
 signalé, éventuellement en prenant en compte un ultimatum.
 signalé, éventuellement en prenant en compte un ultimatum.
 
 
 \begin{code}{c}{Prototype de WaitForSingleObject sur MSDN}
 \begin{code}{c}{Prototype de WaitForSingleObject sur MSDN}
@@ -58,9 +62,9 @@ DWORD WaitForSingleObject(
 
 
 Cependant, cela correspond peu à notre cas d'usage et sera plutôt utilisé pour
 Cependant, cela correspond peu à notre cas d'usage et sera plutôt utilisé pour
 les manipulations de processus. On peut donc s'intéresser à la variante nous
 les manipulations de processus. On peut donc s'intéresser à la variante nous
-concernant, qui sans surprise s'appelle \inltype{WaitForMultipleObjects}.
+concernant, qui sans surprise s'appelle \inltype{WaitForMultipleObjects}
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-waitformultipleobjects}}.
 
 
-%https://docs.microsoft.com/en-us/windows/desktop/api/synchapi/nf-synchapi-waitformultipleobjects
 \begin{code}{c}{Prototype de la fonction WaitForMultipleObjects sur MSDN}
 \begin{code}{c}{Prototype de la fonction WaitForMultipleObjects sur MSDN}
 DWORD WaitForMultipleObjects(
 DWORD WaitForMultipleObjects(
   DWORD        nCount,
   DWORD        nCount,
@@ -86,11 +90,16 @@ faut donc parcourir à nouveau le tableau pour trouver les autres
 \subsection{Overlapped IO}
 \subsection{Overlapped IO}
 
 
 Windows fournit ensuite un mécanisme bas niveau pour mettre les opérations d'IO
 Windows fournit ensuite un mécanisme bas niveau pour mettre les opérations d'IO
-en «tâche de fond». Ci-dessous, on voit dans les prototypes des fonctions de
-lecture et écriture
-%TODO phrase pas fini au dessus
+en «tâche de fond»
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/sync/synchronization-and-overlapped-input-and-output}}.
+Ci-dessous, on voit l'argument \inltype{lpOverlapped} dans les prototypes des
+fonctions de lecture
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-readfile}}
+et écriture
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-writefile}}
+qui va contenir l'état de l'opération lorsqu'elle est réalisée de façon
+asynchrone.
 
 
-%TODO https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-writefile
 \begin{code}{c}{Prototype de WriteFile sur MSDN}
 \begin{code}{c}{Prototype de WriteFile sur MSDN}
 BOOL WriteFile(
 BOOL WriteFile(
   HANDLE       hFile,
   HANDLE       hFile,
@@ -101,8 +110,6 @@ BOOL WriteFile(
 );
 );
 \end{code}
 \end{code}
 
 
-
-%TODO https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-readfile
 \begin{code}{c}{Prototype de ReadFile sur MSDN}
 \begin{code}{c}{Prototype de ReadFile sur MSDN}
 BOOL ReadFile(
 BOOL ReadFile(
   HANDLE                        hFile,
   HANDLE                        hFile,
@@ -125,9 +132,10 @@ fournit ainsi un moyen de passer d'un modèle par disponibilité à un modèle p
 complétion.
 complétion.
 
 
 Il est possible d'étendre encore le modèle asynchrone en utilisant des
 Il est possible d'étendre encore le modèle asynchrone en utilisant des
-«completion routines». Il faut alors utiliser la version suivante:
+«completion routines». Il faut alors utiliser la version \inltype{ReadFileEx}
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-readfileex}}
+pour la lecture.
 
 
-%TODO: https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-readfileex
 \begin{code}{c}{Prototype de la fonction ReadFileEx sur MSDN}
 \begin{code}{c}{Prototype de la fonction ReadFileEx sur MSDN}
 BOOL ReadFileEx(
 BOOL ReadFileEx(
   HANDLE                          hFile,
   HANDLE                          hFile,
@@ -138,10 +146,11 @@ BOOL ReadFileEx(
 );
 );
 \end{code}
 \end{code}
 
 
-Le paramètre \inltype{lpCompletionRoutine} est un pointeur de fonction du type
+Le paramètre \inltype{lpCompletionRoutine}
+\footnote{\url{https://msdn.microsoft.com/en-us/574eccda-03eb-4e8a-9d74-cfaecc7312ce}}
+est un pointeur de fonction du type
 suivant:
 suivant:
 
 
-%TODO: https://msdn.microsoft.com/en-us/574eccda-03eb-4e8a-9d74-cfaecc7312ce
 \begin{code}{c}{Définition de LPOVERLAPPED\_COMPLETION\_ROUTINE sur MSDN}
 \begin{code}{c}{Définition de LPOVERLAPPED\_COMPLETION\_ROUTINE sur MSDN}
 typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE)(
 typedef VOID (WINAPI *LPOVERLAPPED_COMPLETION_ROUTINE)(
     _In_    DWORD        dwErrorCode,
     _In_    DWORD        dwErrorCode,
@@ -161,11 +170,11 @@ système similaire à epoll, dans un modèle par complétion, en étendant les
 sur beaucoup de points donc elle sera plus longuement décrite ici pour apporter
 sur beaucoup de points donc elle sera plus longuement décrite ici pour apporter
 des explications dans ce rapport.
 des explications dans ce rapport.
 
 
-Un IOCP peut être créé avec la fonction \inltype{CreateIoCompletionPort} en
-passant \inltype{INVALID_HANDLE_VALUE} comme \inltype{FileHandle} et
+Un IOCP peut être créé avec la fonction \inltype{CreateIoCompletionPort}
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/fileio/createiocompletionport}}
+en passant \inltype{INVALID_HANDLE_VALUE} comme \inltype{FileHandle} et
 \inltype{NULL} comme \inltype{ExistingCompletionPort}.
 \inltype{NULL} comme \inltype{ExistingCompletionPort}.
 
 
-% TODO: https://docs.microsoft.com/en-us/windows/desktop/fileio/createiocompletionport
 \begin{code}{c}{Prototype de CreateIoCompletionPort sur MSDN}
 \begin{code}{c}{Prototype de CreateIoCompletionPort sur MSDN}
 HANDLE WINAPI CreateIoCompletionPort(
 HANDLE WINAPI CreateIoCompletionPort(
     _In_     HANDLE    FileHandle,
     _In_     HANDLE    FileHandle,
@@ -195,9 +204,10 @@ construction, mais le cas ne nous intéresse pas pour l'implémentation de
 \inltype{vlc_msg_poller_t}.
 \inltype{vlc_msg_poller_t}.
 
 
 Une fois les opérations associées au port, on peut utiliser
 Une fois les opérations associées au port, on peut utiliser
-\inltype{GetQueuedCompletionStatus} pour récupérer un paquet de complétion.
+\inltype{GetQueuedCompletionStatus}
+\footnote{\url{https://msdn.microsoft.com/en-us/library/Aa364986(v=VS.85).aspx}}
+pour récupérer un paquet de complétion.
 
 
-% TODO: https://msdn.microsoft.com/en-us/library/Aa364986(v=VS.85).aspx
 \begin{code}{c}{Prototype de GetQueuedCompletionStatus sur MSDN}
 \begin{code}{c}{Prototype de GetQueuedCompletionStatus sur MSDN}
 BOOL WINAPI GetQueuedCompletionStatus(
 BOOL WINAPI GetQueuedCompletionStatus(
     _In_  HANDLE       CompletionPort,
     _In_  HANDLE       CompletionPort,
@@ -214,10 +224,10 @@ la structure \inltype{OVERLAPPED} contenant les données et informations liées
 l'opération effectuée.
 l'opération effectuée.
 
 
 Enfin, il sera possible de poster une notification sans effectuer d'opération en
 Enfin, il sera possible de poster une notification sans effectuer d'opération en
-appelant \inltype{PostQueuedCompletionStatus}, afin de débloquer la boucle
-événementielle par exemple.
+appelant \inltype{PostQueuedCompletionStatus}
+\footnote{\url{https://docs.microsoft.com/en-us/windows/desktop/FileIO/postqueuedcompletionstatus}},
+afin de débloquer la boucle événementielle par exemple.
 
 
-% TODO: https://docs.microsoft.com/en-us/windows/desktop/FileIO/postqueuedcompletionstatus
 \begin{code}{c}{Prototype de PostQueuedCompletionStatus}
 \begin{code}{c}{Prototype de PostQueuedCompletionStatus}
 BOOL WINAPI PostQueuedCompletionStatus(
 BOOL WINAPI PostQueuedCompletionStatus(
     _In_     HANDLE       CompletionPort,
     _In_     HANDLE       CompletionPort,