Win32, ReadFile из блока канала даже после завершения дочернего процесса

У меня есть простая программа (на C), которая создает два дочерних процесса, ждет унаследованного канала каждый и помещает вывод в файл .

Все работает хорошо, за исключением того, что после некоторого цикла записи/чтения по двум каналам, когда дочерний процесс завершается, вызов блока ReadFile ожидает данных по каналу. Я использую следующий шаблон:

...
//create pipe1
CreatePipe(&hReadDup,&hWrite,&saAttr,0);
DuplicateHandle(GetCurrentProcess(),hReadDup,GetCurrentProcess(),&hRead,0,FALSE,DUPLICATE_SAME_ACCESS);
CloseHandle(hReadDup);


si.cb = sizeof(si);
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdOutput = hWrite;   

CreateProcess(  NULL,
        const_cast<LPWSTR>(cmd2.c_str()), //the command to execute
        NULL,
        NULL,
        TRUE,
        0,
        NULL,
        NULL,
        &si, //si.
        &pi
    );

...
CloseHandle(hWrite); // EDIT: this was the operation not properly done!

while(cont){
    ...
    cont = ReadFile(hRead,buf,50, &actual,NULL);
    ...
}
... 

Блок последнего вызова (после выхода из дочернего процесса). Идея почему (и если нет, то как это отладить)?

11
задан ArtoAle 2 June 2012 в 14:02
поделиться