Re: CreateProcess in a loop
This is the actual code.
bool CNetworkDlg::IsIPValid(CString szResource)
{
int maxwait = 0;
bool retVal = true; MSG winmsg;
PMIB_IPFORWARDROW pBestRoute;
DWORD ExitCode;
CMessages *msgs;
msgs = new CMessages;
msgs->Create(IDD_MESSAGE);
msgs->m_appMsgs=("Pinging network resource...");
msgs->UpdateData(FALSE);
msgs->CenterWindow();
msgs->ShowWindow(SW_SHOW);
CString temp = "ping ";
szResource = temp + szResource;
while ( maxwait < 5 )
{
// Check to see if we can ping szResource (i.e, some server)
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;
msgs->UpdateWindow();
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
(char*)(LPCTSTR)szResource, // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
MessageBox( "IsIPValid: CreateProcess failed");
temp.Format("%d",GetLastError());
MessageBox("Error: " + temp);
return false;
}
// Wait until process exits.
WaitForSingleObject( pi.hProcess, INFINITE);
GetExitCodeProcess(pi.hProcess, &ExitCode);
szResource.Format("%d",ExitCode);
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
if ( ExitCode == 0 )
{
retVal = true;
break;
}
Sleep(3000);
maxwait++;
} // end while
msgs->DestroyWindow();
if (maxwait > 4) retVal = false;
return retVal;
}