Bonjour,

Je m'interroge sur LE moyen de sortir le plus proprement possible d'une boucle de lecture d'un flux avec la fonction ReadFile().

Dans mon cas, on va dire que j'ai N threads qui lancent chacun un exécutable (CreateProcess()) dont la sortie standard est redirigée vers un pipe. Ces N threads lancent un thread de lecture de ce pipe.

Comme précisé précédemment, pour lire le contenu du pipe, j'utilise la fonction ReadFile(), sur laquelle je boucle. Je pense ne pas pouvoir sortir de cette boucle en testant la valeur du paramètre DWORD nNumberOfBytesToRead, ni même en appelant PeekNamedPipe() pour tester LPDWORD lpTotalBytesAvail, parce que les exécutables lancés sont différents et il peut se passer plusieurs secondes avant l'écriture dans le pipe.

J'ai tenté de partager une variable entre chaque paire de threads, sans résultat. En fait, je pensais qu'en passant son adresse en paramètre aux threads enfants, et en la modifiant dans les threads parents une fois que l'exécutable aurait terminé son exécution, je pourrais retrouver ce changement de valeur dans les threads enfants et ainsi pouvoir les arrêter.
Bizarrement, je capte ce changement de valeur avec ce code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
while(1)
{
     if(marqueur == 0)
         break;
}
mais pas avec celui-ci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
while(1)
{
     if(ReadFile(/* paramètres */))
     {
           /* Traitements */
     }
     if(marqueur == 0)
         break;
}
Qu'est-ce que j'ai loupé ?