首先我把代码贴出来吧.sa.nLength:= SizeOf(sa);
  sa.lpSecurityDescriptor:= nil;
  sa.bInheritHandle:= True;
  if not CreatePipe(hOutRead, hOutWrite, @sa, 0) then
  begin
    ShowMessage('CreatePipe Error!!!');
    Exit;
  end;
  ZeroMemory(@Buf[0],1024);
  ZeroMemory(@si, SizeOf(si));
  si.cb:= SizeOf(si);
  si.dwFlags:= STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  si.wShowWindow:= SW_HIDE;
  si.hStdOutput:= hOutWrite;
  si.hStdError:= hOutWrite;
  if not CreateProcess(nil,'E:\MinGW\Bin\gcc.exe c:\2_3.c -o c:\2_3.exe -O2 -Wall -lm -DONLINE_JUDGE',nil,nil,True,CREATE_NEW_CONSOLE,nil,nil,si,pi) then
  begin
    ShowMessage('CreateProcess Error!!!');
    Exit;
  end;  case WaitForSingleObject(pi.hProcess, 2000) of
    WAIT_OBJECT_0:
      begin
        CloseHandle(hOutWrite) ;
        if ReadFile(hOutRead,Buf, 1024, dwCount, nil) then
        begin
          ShowMessage('GetReadBack: ' + StrPas(PChar(@buf[0])));
        end
        else
        begin
          dwCount:= GetLastError;
          ShowMessage(IntToStr(dwCount));
        end;          
      end;
    WAIT_TIMEOUT:
      TerminateProcess(pi.hProcess, 100);
  end;
  CloseHandle(pi.hProcess);
  CloseHandle(pi.hThread);
调试过程中,发现ReadFile返回false了,而GetLastError返回109也就是Error_Broken_Pipe
如果在ReadFile前不关闭写入端hOutWrite的话,ReadFile函数会阻塞.
求解,如何解决这个问题.