VC++ 2005のセキュアなCRTの変更は~
BEGIN_MESSAGE_MAP(CToFullModelDlg, CDialog)
~省 略~
ON_WM_TIMER()
END_MESSAGE_MAP()
void CToFullModelDlg::startTimer()
{
m_nTimer = SetTimer(100000, 2000,0);
// MessageBeep(0xFFFFFFFF); // Beep
}
void CToFullModelDlg::stopTimer()
{
KillTimer(m_nTimer);
}
void CToFullModelDlg::OnTimer(UINT_PTR nIDEvent)
{
// 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);
}
最終更新:2010年03月22日 22:52