怎么监视自己创建的进程结束,并进行相关处理

如何监视自己创建的进程结束,并进行相关处理
小弟第一次涉及线程方面的问题:想在一个A程序里执行某一个应用B程序,然后监视B程序是否结束(可以用timer进行监视),如果B结束则A程序进行一些收尾处理,然后结束A程序.请高手给出具体的代码,谢谢.

------解决方案--------------------
WaitForSingleObject
------解决方案--------------------
PROCESS_INFORMATION pi;
STARTUPINFO si;
si.cb = sizeof(STARTUPINFO);
si.lpReserved = NULL;
si.lpDesktop = NULL;
si.lpTitle = NULL;
si.dwFlags = 0;
si.cbReserved2 = 0;
si.lpReserved2 = NULL;
BOOL bres = CreateProcess(NULL, "test a.txt b.txt ",NULL,NULL,false,
NORMAL_PRIORITY_CLASS,
NULL,NULL,&si,&pi);
if(bres==false)
{
AfxMessageBox( "CreateProcess failed ");
}
else
{
CloseHandle(pi.hThread);
DWORD dwret=WaitForSingleObject(pi.hProcess, 1000*30);
switch(dwret)
{
case WAIT_OBJECT_0:
DWORD dwexitcode;
bres = GetExitCodeProcess(pi.hProcess,&dwexitcode);
TCHAR exitmsgbuf[1024];
if(bres)
{
wsprintf(exitmsgbuf, "exit code:%d ",dwexitcode);
}
else
wsprintf(exitmsgbuf, "exit code failed to return ");

AfxMessageBox(exitmsgbuf);
break;
default:
AfxMessageBox( "exit for other reason ");
}
CloseHandle(pi.hProcess);
}
------解决方案--------------------
使用一些进程方面的通讯,比如共享内存等,简单一点的话,B程序结束后发一个Post消息给你,等等,你也可以监控B程序等等。
------解决方案--------------------
if (CreateProcess(cadInstallDir, NULL, NULL, NULL, FALSE,
0, NULL, NULL, &StartupInfo, &ProcessInfo))
{


WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
/* Process has terminated */
//MessageBox( "over ");
//处理其他
this-> DestroyWindow();
}
else
{
/* Process could not be started */
;//...
}