CloseHandle(hWrite); // 关闭写句柄
// 读管道直至管道关闭
while (ReadFile(hRead, ReadBuf, 100, &ReadNum, NULL))
{
ReadBuf[ReadNum] = '/0';
printf("从管道[%s]读取%d字节数据/n", ReadBuf, ReadNum);
}用以上代码读去子进程的输出后, 如果要再次读取, 必须要打开子进程的hWrite句柄吧?该如何打开?
// 读管道直至管道关闭
while (ReadFile(hRead, ReadBuf, 100, &ReadNum, NULL))
{
ReadBuf[ReadNum] = '/0';
printf("从管道[%s]读取%d字节数据/n", ReadBuf, ReadNum);
}用以上代码读去子进程的输出后, 如果要再次读取, 必须要打开子进程的hWrite句柄吧?该如何打开?
{
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都没有跑, 线程就结束了, 奇怪!!
char buffer[1024*4] = {0};
换new申请吧。感觉从ReadFile退出,应该是堆栈出问题了。个人感觉少用大的buffer,因为栈大小有限制的。