作者:阿毛 | 来源:互联网 | 2023-08-21 08:28
问题是这样的:需要在一个进程中调用另外一个程序,在这个程序运行中,主进程处于等待状态等这个程序运行完毕后主进程再继续执行。我用的是winexec可是主进程不等待,请赐教!!!
问题是这样的:
需要在一个进程中调用另外一个程序,在这个程序运行中,主进程处于等待状态等这个程序运行完毕后主进程再继续执行。
我用的是winexec 可是主进程不等待,请赐教!!!
9 个解决方案
用CreateProcess() 函数来启动你的子进程,CreateProcess函数的最后一个参数是,
PROCESS_INFORMATION,结构体的指针,当你用这个函数启动子进程之后,该子进程的句柄就会存在于这个结构体中的 hProcess成员中,
PROCESS_INFORMATION结构体原形如下:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;
然后你在主进程中用WaitForSingleObject()函数来等待这个hProcess,只有当子进程运行完毕返回时,这个WaitForSingleObject才会返回,也就达到了楼主的目的
如:
PROCESS_INFORMATION ProcessInfo;
CreateProcess(....,&ProcessInfo);
WaitForSingleObject(ProcessInfo.hProcess,INFINITE);
注:INFINITE表示此函数一直等待,直到子进程结束
希望上面这些对你有所帮助!
system(const char*)
也有类似功能吧
^_^
// 运行进程直到其正常结束
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
if (CreateProcess("c:\\winnt\\notepad.exe", NULL,
NULL, NULL, FALSE, 0, NULL,
NULL, &StartupInfo, &ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
return;
}
只要修改CreateProcess()的参数就能启动不同的程序,我的代码可以直接拷贝到程序中。
win98/VC6下调试通过,祝你进步!
PROCESS_INFORMATION ProcessInfo;
STARTUPINFO StartupInfo;
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
if (CreateProcess("c:\\winnt\\notepad.exe", NULL,
NULL, NULL, FALSE, 0, NULL,
NULL, &StartupInfo, &ProcessInfo))
{
WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
CloseHandle(ProcessInfo.hThread);
CloseHandle(ProcessInfo.hProcess);
}
else
{
return;
}
zhangcrony
拷我代码干什么?想蹭分??:)
见者有份罗!fzd999(花差花差) !
CreateProcess + WaitForSingleObject这个方法的确不错!
我就不拷贝你的代码了!楼主也给我点分嘛!:)