WaitForSingleObject不等待进程结束[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WaitForSingleObject不等待进程结束[重复]相关的知识,希望对你有一定的参考价值。
我想等待进程执行结束(calc.exe),但它不起作用。我的程序快速完成/现在我的进程(calc.exe)继续运行(我没有停止它)。
和WaitForSingleObject立即返回WAIT_OBJECT_0。
ps:我禁用了我的软件防病毒软件(AVIRA)
int main(int argc, char** arv)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
const char * calcPrgm = "C:\\Windows\System32\calc.exe";
LPSTR calcPrgmLpstr = const_cast<LPSTR>(calcPrgm);
// Start the child process.
if (!CreateProcess(NULL, // No module name (use command line)
calcPrgmLpstr, // 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
)
{
printf("CreateProcess failed (%d).
", GetLastError());
return -1;
}
// Wait until child process exits.
auto ret = WaitForSingleObject(pi.hProcess, INFINITE);
printf("WaitForSingleObject ret = %x
", ret);
if (ret == WAIT_OBJECT_0)
{
printf("WaitForSingleObject ret ret == WAIT_OBJECT_0
");
}
BOOL b = FALSE;
DWORD n = 0;
b = GetExitCodeProcess(pi.hProcess, &n);
// Close process and thread handles.
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
printf("WaitForSingleObject end
");
return 0;
}
答案
我发现了错误。 “calc.exe”在退出之前创建另一个进程。我在主要的“Sleep(60 * 1000);”中使用一行代码创建/调用了我自己的程序。现在好了:)
以上是关于WaitForSingleObject不等待进程结束[重复]的主要内容,如果未能解决你的问题,请参考以下文章
由于句柄无效,WaitForSingleObject 返回等待失败
WaitForSingleObject 和 WaitForMultipleObjects函数
单个 SetEvent() 能否触发多个 WaitForSingleObject()
Delphi WinAPI WaitForSingleObject-等待函数-等待指定对象处于有信号状态或超时间隔结束。