~省 略~ ON_WM_TIMER()
m_nTimer = SetTimer(100000, 2000,0); // MessageBeep(0xFFFFFFFF); // Beep
KillTimer(m_nTimer);
// TODO: ここにメッセージ ハンドラ コードを追加するか、既定の処理を呼び出します。 MessageBeep(0xFFFFFFFF); // Beep CDialog::OnTimer(nIDEvent);
while (true) { //trace("## stderr"); DWORD avail; if (!PeekNamedPipe(stderrRead, NULL, 0, NULL, &avail, NULL)) break; if (avail > 0) { DWORD bytesRead = 0; char readBuf[1025]; if (avail>1024) avail = 1024; if (!ReadFile(stderrRead, readBuf, avail, &bytesRead, NULL) || bytesRead == 0) { break; } for (unsigned int i=0 ; i<bytesRead ; i++) errbuf.push_back(readBuf[i]); } //trace("## stdout"); if (!PeekNamedPipe(stdoutRead, NULL, 0, NULL, &avail, NULL)) break; if (avail > 0) { DWORD bytesRead = 0; char readBuf[1025]; if (avail>1024) avail = 1024; if (!ReadFile(stdoutRead, readBuf, avail, &bytesRead, NULL) || bytesRead==0) { break; } for (unsigned int i=0 ; i<bytesRead ; i++) outbuf.push_back(readBuf[i]); } DWORD exitCode; GetExitCodeProcess(piProcessInfo.hProcess, &exitCode); if (exitCode != STILL_ACTIVE) break; Sleep(100); }