Bonjour,
j'ai un bout de code d'une appli qui lit via un pipe le stdout d'un processus fils de mon appli cree avec CreateProcess (oui c'est sous windows).
Je souhaiterais pouvoir mettre un timeout sur la lecture de ce pipe, c'est a dire, pouvoir en gros arreter de lire le pipe si le processus fils ne m'envoit plus de donnees pendant 5sec.
J'ai fait un truc comme ca qui devrait passer normalement si je suis la msdn mais qui ne fait rien
if (CGIStdoutRdDup == INVALID_HANDLE_VALUE)
cout << "Invalid Handle" << endl;
timeout.ReadIntervalTimeout = 5000;
timeout.ReadTotalTimeoutConstant = 0;
timeout.ReadTotalTimeoutMultiplier = 0;
timeout.WriteTotalTimeoutConstant = 0;
timeout.WriteTotalTimeoutMultiplier = 0;
SetCommTimeouts(CGIStdoutRdDup, &timeout);
while (1)
{
if(!ReadFile(CGIStdoutRdDup, chBuf, 1024, &dwRead, NULL))
break;
if (dwRead == 0)
{
cout << "timeout" << endl;
break;
}
// suite du code
}
le programme dont je lis le stdout avec mon pipe est simplissime:
cout << "Meuuh";
Sleep(15000);
cout << "Re-Meuuh";
normalement le Re-Meuuh ne devrait jamais etre lu mais ce n'est pas le cas et je ne sais pas pourquoi.
Merci de votre aide.