CloseHandle(hWrite); // 关闭写句柄
  // 读管道直至管道关闭
  while (ReadFile(hRead, ReadBuf, 100, &ReadNum, NULL))
  {
   ReadBuf[ReadNum] = '/0';
   printf("从管道[%s]读取%d字节数据/n", ReadBuf, ReadNum);
  }用以上代码读去子进程的输出后, 如果要再次读取, 必须要打开子进程的hWrite句柄吧?该如何打开?

解决方案 »

  1.   

    多谢各位, 我现在多开了一个线程, 用以下程序读管道:UINT ThreadFunc(LPVOID lpParam)
    {
    threadInfo* pInfo=(threadInfo*)lpParam; char buffer[1024*4] = {0};
    DWORD bytesRead = 0; CString strReadBuffer = _T(""); while( ReadFile(hRead,buffer,sizeof(buffer),&bytesRead,NULL))
    {
    if ( bytesRead > 0 )
    {
    strReadBuffer += buffer;
    bytesRead = 0;
    memset(buffer, 0, sizeof(buffer));
    }
    } strReadBuffer += pInfo->strLogInfo; ShowMessageONEdit(pInfo->pEdit, strReadBuffer);
    return 0;
    }发现一个很奇怪的问题, 程序可以跑到while里面读数据, 但是, 当子进程关闭了写管道后, 这个线程就直接从while里面退出去了, 而不会执行下面的: strReadBuffer += pInfo->strLogInfo; 这条语句以后的都不会执行, 是什么原因呢? return 0都没有跑, 线程就结束了, 奇怪!!
      

  2.   

    我跟了一下代码, 发现这个线程会直接从readfile()里面退出去.
      

  3.   

    您那个buffer也太大了。
    char buffer[1024*4] = {0};
    换new申请吧。感觉从ReadFile退出,应该是堆栈出问题了。个人感觉少用大的buffer,因为栈大小有限制的。