【】通过进程或线程调用外部程序的有关问题。谢谢

【求助】通过进程或线程调用外部程序的问题。。。多谢
现在希望通过一个线程或一个进程   循环   调用一个外部程序(一个控制台程序,接收一个参数——一个文件路径,(执行完后自动退出?)几个参数就调用几次),
执行完毕后才退出。

开始时,我是用SHELLEXECUTEINFO   ShExecInfo和ShellExecuteEx(&ShExecInfo)
调用外部程序的,但是有时候被调用的程序没有执行完,调用程序就退出了。。。

所以想能不能用进程或线程的方法实现?

多谢指点!

------解决方案--------------------
SHELLEXECUTEINFO ShExecInfo = {0};
...........

ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess, 60000);
------解决方案--------------------
用CreateProcess,然后用CEvent互斥
------解决方案--------------------
typedef struct _THREADINFO
{
CEvent* pTermThreadEvent;
TCHAR chPathName[MAX_PATH];
int nProductIndex;
}THREADINFO, *PTHREADINFO;


主线程
CWinThread* pThread = NULL;
pThread = AfxBeginThread(LaunchAndWait, pThreadInfo);
WaitForSingleObject(pThreadEvent-> m_hObject, INFINITE);

运行的线程
UINT CUpdateManager::LaunchAndWait(LPVOID pParam)
{
PTHREADINFO pThreadInfo = (PTHREADINFO) pParam;
PROCESS_INFORMATION stProcessInfo;
STARTUPINFO stStartUpInfo;

memset(&stStartUpInfo, 0, sizeof(STARTUPINFO));

stStartUpInfo.cb = sizeof(STARTUPINFO);

stStartUpInfo.dwFlags = STARTF_USESHOWWINDOW;
stStartUpInfo.wShowWindow = SW_SHOWDEFAULT;

if (CreateProcess(NULL, pThreadInfo-> chPathName, NULL, NULL, FALSE,
NORMAL_PRIORITY_CLASS, NULL,
NULL, &stStartUpInfo, &stProcessInfo))
{
HANDLE hThreads[2];
hThreads[0] = pThreadInfo-> pTermThreadEvent-> m_hObject;
hThreads[1] = stProcessInfo.hProcess;
DWORD dwIndex = WaitForMultipleObjects(2, hThreads, FALSE, INFINITE);
CloseHandle(stProcessInfo.hThread);
CloseHandle(stProcessInfo.hProcess);
pThreadInfo-> pTermThreadEvent-> SetEvent();
if(pThreadInfo)
delete pThreadInfo;
}
else
{
pThreadInfo-> pTermThreadEvent-> SetEvent();
}
return 0;
}

------解决方案--------------------
我觉得你应该去看看Windows核心编程之类的书。人家讲“概念”是有道理的,因为讲得太深入几乎不可能,内容太多了

这里没有所谓线程得需求,调用其他进程得进程退出和你得调用外部进程得需求又没有矛盾,为什么是个问题?
------解决方案--------------------
用CreateProcess调用进程,这个API要求的最后一个参数中有一个hProcess,标识着进程的句柄,用WaitForSingleObject(句柄,...)来等待,这样,只有外部进程结束后,这个函数才会返回,这样,外部进程就达到一个接一个调用的目的了。