gpt4 book ai didi

c++ - Winapi 同步进程

转载 作者:行者123 更新时间:2023-11-28 03:20:32 25 4
gpt4 key购买 nike

我有 3 个简单的程序,每个都是一个简单的窗口。我将启动所有 3 个进程,然后单击程序 1 或 2 的按钮以显示程序 3 的窗口。
程序 1 和 2:只有 1 个按钮。单击时,显示程序 3 的隐藏进程(也是一个窗口)。
程序3:作为隐藏进程启动,等待程序1、2的消息弹出。根据按下的按钮,窗口标题应更改为程序 1 或 2 的标题。

我不确定是什么功能或者我是否使用线程来实现这种行为?我相信我需要使用某种线程来执行此操作。首先隐藏程序 3,然后等待程序 1 和 2 的消息。有什么想法吗?

编辑:我正在使用 C++,我被告知要使用信号量。

最佳答案

我建议使用 Windows Event .具体来说,一个手动重置事件。您的程序 3 会等待该事件。当程序1或程序2要唤醒窗口时,它设置事件。当程序 3 返回隐藏状态时,它会清除事件。

您可以使用 SendMessagePostMessage,但该事件似乎更简单直接。它还具有一定的优势:

  • 程序 1 和程序 2 不需要找到程序 3 的窗口句柄,也不需要广播可能被其他进程拦截的消息。
  • 您可以为事件添加安全属性以防止恶意程序访问它。
  • 您可以从控制台应用程序、Windows 服务或任何其他进程使用该技术,无论它是否运行消息循环。
  • 它比使用 Windows 消息更容易理解(无论如何对我而言)。

这不是信号量的合适用途。信号量通常用于同步对多个共享资源的访问。您在这里只想让程序 3 等待通知,并让程序 1 或程序 2 能够发送该通知。

如果您必须将数据从 Program 1 传递到 Program 3,那么 Event 不会帮助您这样做。在这种情况下,您必须想出一种通信方法,例如内存映射文件、管道、网络套接字……甚至是 Windows 消息。但是对于简单的“嘿,醒醒!”通知,我会使用事件。

关于c++ - Winapi 同步进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15576528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com