Lecture sur Pipe et timeout

cs_Bobarctor Messages postés 1 Date d'inscription mardi 7 décembre 2004 Statut Membre Dernière intervention 7 décembre 2004 - 7 déc. 2004 à 17:39
mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005 - 27 juil. 2005 à 02:08
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.

1 réponse

mythic_kruger Messages postés 241 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 10 novembre 2005
27 juil. 2005 à 02:08
Si quelqu'un cherche encore, regarder du côté de waitforsingleobject()
0
Rejoignez-nous