父进程是windows服务程序,一个win32控制台程序作为子进程。需要子进程的输出重定向到父进程中,使用windows匿名管道,发现子进程的输出要等到该进程退出后才能被父进程读取到,此外,子进程单独运行很正常,但是在父进程里创建后,使用管道读取时,发现占用CPU很高,而父进程占用CPU很正常,很难理解是父进程的读取函数被锁住了,因为父进程并没有CPU占用异常。
代码:
创建管道...
CreateProcess(......);
//读取线程
...
while (true)
{
Sleep(20);
ReadFile(hReadPipe,buffer,4095,&bytesRead,NULL);
.......
}
...
代码:
创建管道...
CreateProcess(......);
//读取线程
...
while (true)
{
Sleep(20);
ReadFile(hReadPipe,buffer,4095,&bytesRead,NULL);
.......
}
...
解决方案 »
- 散分了,散分了,解释下关于数组和指针的代码。
- 现在能接收数据,为什么不能如字符+数字+字符里然后变成(char *)再发送到上面的服务器里,但当我客户端接收时却只能接收到前面的字符后
- 关于EnumProcessModules函数的一个问题
- 坐标精度问题……
- 使用ODBC如何关闭一表,打开另一表?苦思一周,未果?
- 什么地方可以找到win2000的ddk
- 一个隐式调用dll的问题
- odbc连接oracle数据库问题,急,请大家帮忙
- 请教一个关于VarCmp编译时出错的问题?
- prog_st(st)来领“隐藏Menu”的分
- 添加ActiveX控件后,RunTime中控件没有正确显示
- 添加了ActiveX控件后,对话框Dododal失败
以上这个帖子的一部分类似,但结论并没有解决问题,这里已经使用了线程机制进行读取了。
此外,CPU占用异常的问题很奇怪,是父进程的读取引起,但是父进程CPU占用正常,而子进程
却反而CPU异常了。
{
UINT rtcode;
PROCESS_INFORMATION piProcInfoGPS;
STARTUPINFO siStartupInfo;
SECURITY_ATTRIBUTES saProcess, saThread,sa;
HANDLE hTemp; ZeroMemory( &siStartupInfo, sizeof(siStartupInfo) );
siStartupInfo.cb = sizeof(siStartupInfo);
saProcess.nLength = sizeof(saProcess);
saProcess.lpSecurityDescriptor = NULL;
saProcess.bInheritHandle = true;
saThread.nLength = sizeof(saThread);
saThread.lpSecurityDescriptor = NULL;
saThread.bInheritHandle = true;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
CreatePipe(&hReadPipe,&hWritePipe,&sa,0);
hTemp = GetStdHandle(STD_OUTPUT_HANDLE);
siStartupInfo.cb = sizeof(STARTUPINFO);
GetStartupInfo(&siStartupInfo);
siStartupInfo.wShowWindow = SW_HIDE;
siStartupInfo.hStdOutput = hWritePipe;
siStartupInfo.hStdError = hWritePipe;
siStartupInfo.dwFlags = STARTF_USESTDHANDLES| STARTF_USESHOWWINDOW ;//;// |;//|
rtcode = CreateProcess( NULL, (LPTSTR)pszExeName, &saProcess, &saThread, false,CREATE_NO_WINDOW, NULL, NULL, &siStartupInfo,&piProcInfoGPS);
nProcessID = piProcInfoGPS.dwProcessId;
SetStdHandle(STD_OUTPUT_HANDLE, hTemp);
CloseHandle(hWritePipe); return rtcode;}