首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

散分,ReadFile疑难有关问题,高手乱入

2012-02-01 
散分,ReadFile疑难问题,高手乱入在进程版块问了半天没人会用ReadFile从管道里读ipconfig的输出结果,一执行

散分,ReadFile疑难问题,高手乱入
在进程版块问了半天没人会

用ReadFile从管道里读ipconfig的输出结果,一执行到ReadFile那部就卡死了,沙漏了.

但调试到这部证明能读出正确的东西.


void   CTestPipeDlg::OnBnClickedButton1()
{
//   TODO:   在此添加控件通知处理程序代码
BOOL   flag1;
SECURITY_ATTRIBUTES   sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox( "管道创建失败 ");
return;
}
/////////////////
      STARTUPINFO   sui;
      PROCESS_INFORMATION   pi;
      ZeroMemory(&sui,sizeof(STARTUPINFO));
      sui.cb=sizeof(STARTUPINFO);
      sui.dwFlags=STARTF_USESTDHANDLES;
      sui.hStdInput=hRead;
      sui.hStdOutput=hWrite;
      sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);
      /////////////
      char   szFetCmd[]   =   "ipconfig   /all ";
      char   szBuffer[1000];
      CString   strBuffer;
      unsigned   long   count;
      flag1=CreateProcess(NULL,szFetCmd,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi);
      if(flag1)
      {
      flag1=ReadFile(hRead,szBuffer,1000,&count,0);
      if(!flag1)
      {
      CloseHandle(hWrite);
      CloseHandle(pi.hProcess);  
      CloseHandle(pi.hThread);  
      CloseHandle(hRead);
      return;
      }
      else
      {
      strBuffer=szBuffer;
      ::AfxMessageBox(strBuffer);
                          CloseHandle(hWrite);
                      CloseHandle(pi.hProcess);  
                    CloseHandle(pi.hThread);  
                  CloseHandle(hRead);
                  return;
      }
      }
      else
      {
                CloseHandle(hWrite);
                      CloseHandle(pi.hProcess);  
                    CloseHandle(pi.hThread);  
                  CloseHandle(hRead);
      }
}


[解决办法]
flag1=CreateProcess(NULL,szFetCmd,NULL,NULL,TRUE,0,NULL,NULL,&sui,&pi);
WaitForSingleObject( pi.hProcess, INFINITE );//加上这句,等待子程序结束之后再读
if(flag1)
{
flag1=ReadFile(hRead,szBuffer,1000,&count,0);

热点排行