如何处理非窗口应用程序中的关闭请求? 我正在研究一个C++ Windows应用程序,它运行为进程,而不是窗口应用程序(没有WNDPROC)。它有自己的消息循环,用于处理退出消息,这就是我们如何从自身安全地退出应用程序的方法

如何处理非窗口应用程序中的关闭请求? 我正在研究一个C++ Windows应用程序,它运行为进程,而不是窗口应用程序(没有WNDPROC)。它有自己的消息循环,用于处理退出消息,这就是我们如何从自身安全地退出应用程序的方法,windows,winapi,process,Windows,Winapi,Process,我想做的是以某种方式从另一个进程向该进程发送一条消息,以便告诉该进程安全退出 在Linux中,我们可以通过捕获信号来实现这一点,但我不确定在Windows上是如何实现的。您是否可以控制这两个进程,即,您是否拥有这两个进程的代码?如果是,我建议公开API以安全退出。PostThreadMessage可以将消息发布到线程,而无需窗口进程 在第一个过程中,执行GetCurrentThreadId以获取当前线程的系统范围id。然后以某种方式将该id发送到第二个应用程序。 在第二个应用程序中,OpenTh

我想做的是以某种方式从另一个进程向该进程发送一条消息,以便告诉该进程安全退出


在Linux中,我们可以通过捕获信号来实现这一点,但我不确定在Windows上是如何实现的。

您是否可以控制这两个进程,即,您是否拥有这两个进程的代码?如果是,我建议公开API以安全退出。

PostThreadMessage
可以将消息发布到线程,而无需窗口进程

在第一个过程中,执行
GetCurrentThreadId
以获取当前线程的系统范围id。然后以某种方式将该id发送到第二个应用程序。 在第二个应用程序中,
OpenThread
将转换为线程句柄,然后您可以将其与
PostThreadMessage
一起使用


请注意,如果您的“windowprocless”应用程序弹出消息框,消息框将进入其自己的模式消息循环,这将悄悄地销毁任何线程消息。如果在线程上创建了任何类型的窗口,那么最好创建一个不可见的消息窗口,以便发送消息来控制应用程序。

是的,具有完整的代码访问权限。只是想弄清楚是否有一种简单的方法来完成进程的IPC。在这种情况下,有很多IPC机制可以使用。例如,一个简单的方法是让主应用程序在启动时调用CreateEvent()来创建一个处于未标记状态的命名内核事件,然后您的另一个应用程序可以在需要时使用OpenEvent()和SetEvent()发出信号。然后,主应用程序中的消息循环可以使用MsgWaitForMultipleObjects()同时检测排队消息和事件信号,并根据每次循环迭代中报告的消息执行操作。PostThreadMessage()将线程ID作为输入,而不是线程句柄,因此不需要OpenThread()。