有时候我们希望主进程创建一个子进程,而且我们希望父进程运行时,子进程也能运行着。
这就需要我们检测子进程的状态,如果子进程已经结束,我们就重新创建一个,其实方法有很多,今天就是用WaitForSingleObject简单实现一下这个功能。
代码如下:
DWORD WINAPI ThreadProc(
LPVOID lpParameter
)
{
std::string strCmd = (TCHAR*)lpParameter;
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL bOk = FALSE;
lab:
memset(&si,0,sizeof(si));
si.cb = sizeof(si);
si.wShowWindow = SW_HIDE;
memset(&pi,0,sizeof(pi));
//bOk = CreateProcess(NULL,(TCHAR*)strCmd.c_str(),NULL,NULL,FALSE,DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&si,&pi);
bOk = CreateProcess(NULL,(TCHAR*)strCmd.c_str(),NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
if (pi.hProcess != NULL)
{
while (WaitForSingleObject(pi.hProcess,1000) == WAIT_TIMEOUT) //如果进程结束 返回值会是WAIT_OBJECT_0
_asm nop;
if (pi.hProcess != NULL)
CloseHandle(pi.hProcess);
if (pi.hThread != NULL)
CloseHandle(pi.hThread);
goto lab;
}
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadProc,_T("calc"),0,NULL);
if (hThread != NULL)
CloseHandle(hThread);
getchar();
return 0;
}