CreateProcess创建管道读取数据

毒来毒往 2020-09-27 11:30:47
程序循环去读取数据,但是每次都要CreateProcess创建管道读取数据
问题:
能不能只创建一次,后面一直去读取。因为看CreateProcess每次创建都浪费200-300多ms时间。


SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0)) {
ShowLocalizedMsg("Error On CreatePipe()");
return 0;
}

STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,
"c:\\Windows\\system32\\cmd.exe",
NULL,
NULL,
TRUE,
NULL,
NULL,
NULL,
&si,
&pi)
) {
ShowLocalizedMsg("Error on CreateProcess()");
return 0;
}

CloseHandle(hWrite);
char buffer[4096] = {0};
DWORD bytesRead;
while (true) {
if (ReadFile(hRead,buffer,4095,&bytesRead,NULL) == NULL)
break;
printf("%s\n", buffer);
Sleep(200);
}
return 0;
...全文
295 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
毒来毒往 2020-09-28
  • 打赏
  • 举报
回复
怎么创建呢?现在改成创建一次,让后循环往管道writefile写,再Readfile都数据,但是数据不对,而且第二次都会卡再Readfile那
引用 1 楼 zgl7903 的回复:
可以一次创建,永久使用,要管理好句柄
毒来毒往 2020-09-28
  • 打赏
  • 举报
回复
第二次读不卡,但是调试提示 ERROR_BROKEN_PIPE : 管道已结束。
zgl7903 2020-09-27
  • 打赏
  • 举报
回复
可以一次创建,永久使用,要管理好句柄

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧