如何捕获控制台关闭事件?

时间:2011-08-03 13:15:49

标签: windows console windows-vista subprocess pipe

我的问题的背景是:

  1. 我有一个Windows .NET应用程序(GUI)作为主要进程运行。
  2. 从这个(父)进程,我创建了几个子进程作为控制台进程。
  3. 主进程通过命名管道将数据发送到子进程。
  4. 在主应用程序中,我有一个子流程列表。
  5. 我的问题是每个控制台都有一个关闭(“x”)按钮,可以终止(无论它是什么方式)。由于我在主应用程序中保留了已创建控制台的列表,因此我想知道控制台何时被终止或退出。

    我的控制台(子进程)程序只是一个带有循环函数的“main()”,它读取管道(并显示数据)。它没有消息系统或任何其他可以处理窗口“退出”的东西。

    我的第一个想法是从主应用程序轮询子流程以刷新列表。但这意味着我必须引入一个计时器或一个监视控制台的线程。我不喜欢这个主意。

    有人有更好的主意吗?

1 个答案:

答案 0 :(得分:0)

WaitForSingleObject(hThread, 0)将告诉您hThread参数中指定的线程是否已发出信号并因此完成。同样适用于hProcess

CreateProcess()调用后,将返回子进程的两个句柄。您可以立即关闭它们,也可以使用WaitForSingleObject进行监控。