Winapi同步进程
Winapi synchronizing processes
我有3个简单的程序,每个都是一个简单的窗口。我将启动所有3个过程,然后点击程序1或2的按钮,显示程序3的窗口。
节目1 &2:只有一个按钮。点击后,显示程序3的隐藏进程(也是一个窗口)。
程序3:作为隐藏进程启动,在弹出之前等待程序1和程序2的消息。根据按下的按钮,窗口标题应该变为程序1或程序2的标题。
我不确定什么功能或我使用线程使这种行为?我相信我需要使用某种线程来做到这一点。首先将程序3隐藏,然后等待程序1和程序2的消息。什么好主意吗?
编辑:我正在使用c++,我被告知使用一个信号量。
我建议使用Windows Event。具体来说,是手动复位事件。您的程序3对事件执行Wait操作。当程序1或程序2想要唤醒窗口时,它设置事件。当程序3返回隐藏时,它清除事件。
您可以使用SendMessage
或PostMessage
,但事件似乎更容易和直接。它也有一些优点:
- 程序1和程序2不需要找到程序3的窗口句柄,或者广播可能被其他进程截获的消息。
- 您可以为事件添加安全属性,以防止恶意程序访问它。你可以在控制台应用程序、Windows服务或任何其他进程中使用该技术,而不管它是否在操作消息循环。
- 这比使用Windows消息更容易理解(至少对我来说)。
这不是信号量的适当用法。信号量通常用于同步对多个共享资源的访问。你想要的只是程序3等待通知,而程序1或程序2能够发送通知。
如果你必须将数据从程序1传递给程序3,那么Event将无法帮助你做到这一点。你必须想出一种通信方法,比如内存映射文件、管道、网络套接字……在这种情况下甚至是一条Windows消息。但是对于简单的"嘿,醒醒!"通知,我会使用事件。
因为您需要跨流程边界通信一个简单的消息,所以我建议使用SendMessage家族中的一些东西。首先需要获取目标窗口的句柄。这个函数在窗口API中是相当低级的,所以你只能直接从C/c++中获得它,但你没有指定你使用的是什么语言,我认为在这个例程周围有包装器,可以通过c#访问CLR。
- Windows 进程间同步类似事件?
- 如何使用一个信号灯同步 3 个进程?
- 使计时器在C++进程中的特定时间关闭,以便同步两个进程
- 多个线程/进程是否可以在不同步的情况下同时从/写入文件的非重叠区域?
- 如何为以下代码进行进程同步
- 互斥和进程同步;C++
- boost::OSX 上 32 位和 64 位程序之间共享内存中的进程间同步机制(互斥体、条件)
- 进程重定向可以在bash中同步吗
- 如何将记忆映射的文件与另一个进程写入文件同步
- 在Windows(win32或C++)中使用互斥锁的进程间同步
- std::launch::async就像同步进程一样阻塞
- 如何在Boost.process 0.5中与进程同步交互
- 执行这些 Boost::进程间组件需要同步
- MailSlot的进程同步
- 如何使用管道同步父进程和子进程
- Win32 将同步事件发送到其他进程
- 使用 WinAPI/C++ 在 Windows 上的进程之间进行多读取器、单写入器同步锁定
- 有没有办法在考虑到崩溃的情况下同步进程
- POSIX 跨进程共享内存同步 C++/C++11
- 进程同步技术