c++ - 从另一个进程在用户模式下回调,没有额外的线程

标签 c++ c winapi

我想知道是否有人熟悉用户模式下的同步机制,一个应用程序可以通过该机制注册一个“回调”函数,当另一个应用程序向它发出信号时将调用该函数...我不介意回调处于仲裁线程中。

假设我有很多并行的“工作”进程,并且有人想通知他们一个变化(不需要有效载荷数据),每个进程都必须进行一些内部更新。

解决这个问题的直接方法是在它们中的每一个中创建另一个线程,并有一个等待全局事件并在之后立即调用回调函数的无限循环。要发出这一信号,一个进程只需要发出这一全局事件的信号。

问题是我将在这个项目中有很多并行进程,我不想向系统添加 thread*nProcesses 只是为了实现它,即使它们大部分都已暂停。

我为此找到的当前“解决方法”是保留我自己的“虚拟”注册表项,并且每个进程都将“注册注册通知回调”,当一个应用程序想要通知其他应用程序时,它只会触发写入这个键... Windows 将回调注册到此通知的每个进程。

还有其他想法吗?

最佳答案

不会污染注册表的更好的解决方案是使用共享管道。所有工作人员都可以连接到命名管道服务器,并进行异步读取。当服务器想要踢 worker 时,它只写一个字节。这会触发 worker 的完成例程。 Basic example

不过,此通知与大多数其他 Windows 通知一样具有相同的缺点。如果您的所有工作线程都在运行工作代码,则没有线程可以让您的通知到达——而且您也没有为此目的创建一个特殊线程。唯一的解决方案是 CreateRemoteThread,但这是一把非常大的锤子。

关于c++ - 从另一个进程在用户模式下回调,没有额外的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12619695/

相关文章:

c++ - VS2015可执行文件变成病毒(有可能的解决方案但不知道为什么)

c - srtok 在 c 中不工作

c - 重定向到文件时输出会变得困惑

c++ - 使用句柄从外部修改 Windows GUI 对象

c++ - 将 Lua 文件添加到 C++ 程序

c++ - 临时对象最初是 const 吗?

c++ - 可变参数被破坏/无效的原因

c++ - 用于网络模拟的 LogonUser 替代方案 (C++)

c++ - typedef 在c++中别人的.h头文件中声明的函数

c - 为什么 sizeof 报告不同变量的大小相同(8 字节)?