在 .NET 中,您可以订阅对象上的Exited
事件System.Diagnostics.Process
并在进程退出时获得异步通知。这对我来说真的很方便。
使用信号或其他东西在直接 Win32 中是否有任何等价物?我想象的最接近的事情是产生一个线程,该线程除了在无限超时的进程句柄上什么都不做WaitForSingleObject
,然后调用回调。
是的,在进程句柄上调用 WaitForSingleObject() 的线程将起作用。但这很浪费,您可以使用RegisterWaitForSingleObject()让操作系统为您执行此操作。.NET Process 类用于引发 Exited 事件的函数完全相同。
您可以在回调中执行的操作具有完全相同的约束,它在任意线程池线程上运行,因此您必须在必要时正确互锁以保持代码线程安全。
的最后一个参数CreateProcess
是PROCESS_INFORMATION
包含hProcess
句柄的结构,您可以将此句柄与WaitForSingleObject