是否可以从这段代码得出该进程正在运行的结论?
res = WaitForSingleObject(hProcess, 2000);
switch(res)
{
case WAIT_TIMEOUT:
//процесс не работает
CloseHandle(hProc); //закрываем
return 1;
default:
//процесса нет
CloseHandle(hProc);
return 0;
break;
...
问题的答案是否定的,不可能,WAIT_TIMEOUT表示进程正在运行。这个WaitForSingleObject函数用于与另一个进程同步(在本例中),必须使用它,因为当“直接”轮询一个进程时,你的CPU将达到100%并且处理器会发热。示例 - 您可以使用外部实用程序转换视频并等待其完成。您可以执行一些命令行操作。您可以运行任何外部程序。任何程序。
有一个标准示例 https://learn.microsoft.com/ru-ru/windows/win32/procthread/creating-processes
在大多数情况下这就足够了。CloseHandle - 不关闭进程,但关闭可与进程交互的连接。
WaitForSingleObject - 对于一个进程,它将等待该进程完成。但是...如果未设置 INFINITE,则等待后该过程仍然可以工作。
如果返回 WAIT_TIMEOUT,则该进程仍在运行(好吧,如果我们在收到响应后等待一小段时间),如果没有返回,则该进程已完成其工作或 hProcess 无效。
然后你可以用不同的方式构建程序。如果需要2秒后中断进程,那么写
中断其他人的进程需要额外的权限;通常,子进程不需要额外的权限。
但是......例如,您可以每秒执行一次某些操作并继续等待。例如
有用的函数 GetExitCodeProcess
让您清楚地了解该过程是否已完成
您还可以在运行时轮询其他进程参数,还可以与子进程的控制台进行交互(如果有的话)。