Bis jetzt sieht die Execute-Methode meines Threads so aus:
Delphi-Quellcode:
if CreateProcess(name, comLine, nil, nil, true, CREATE_NEW_CONSOLE, nil, nil, StartupInfo, ProcessInfo) then begin
Sleep(100);
if InstallHook(ProcessInfo.dwThreadId) then begin
while True do begin
{1} if WaitForSingleObject(ProcessInfo.hProcess, 10) <> WAIT_TIMEOUT then Exit;
GetExitCodeProcess(ProcessInfo.hProcess, ExitCode);
{2} if ExitCode <> STILL_ACTIVE then Exit;
bool := ReadFile(PipeOutputRead, buf[1], BUF_SIZE, BytesRead, nil);
{3} if not bool then Exit;
{4} if bytesRead = 0 then Exit;
PipeBufferBearbeiten(buf, BytesRead);
end;
end;
end;
Wenn ich nun die Anwendung, die mit CreateProcess gestartet wird schließe, wird weiterhin die while-Schleife ausgeführt. Irgendwann blockiert ReadFile soviel ich weiß. Bei allen 4 if-Bedingungen wird niemals das Exit aufgerufen. Langsam gehen mir die Ideen aus...