我想知道是否有人熟悉用户模式下的同步机制,一个应用程序可以通过该机制注册一个“回调”函数,当另一个应用程序向它发出信号时将调用该函数...我不介意回调处于仲裁线程中。
假设我有很多并行的“工作”进程,并且有人想通知他们一个变化(不需要有效载荷数据),每个进程都必须进行一些内部更新。
解决这个问题的直接方法是在它们中的每一个中创建另一个线程,并有一个等待全局事件并在之后立即调用回调函数的无限循环。要发出这一信号,一个进程只需要发出这一全局事件的信号。
问题是我将在这个项目中有很多并行进程,我不想向系统添加 thread*nProcesses 只是为了实现它,即使它们大部分都已暂停。
我为此找到的当前“解决方法”是保留我自己的“虚拟”注册表项,并且每个进程都将“注册注册通知回调”,当一个应用程序想要通知其他应用程序时,它只会触发写入这个键... Windows 将回调注册到此通知的每个进程。
还有其他想法吗?
最佳答案
不会污染注册表的更好的解决方案是使用共享管道。所有工作人员都可以连接到命名管道服务器,并进行异步读取。当服务器想要踢 worker 时,它只写一个字节。这会触发 worker 的完成例程。 Basic example
不过,此通知与大多数其他 Windows 通知一样具有相同的缺点。如果您的所有工作线程都在运行工作代码,则没有线程可以让您的通知到达——而且您也没有为此目的创建一个特殊线程。唯一的解决方案是 CreateRemoteThread
,但这是一把非常大的锤子。
关于c++ - 从另一个进程在用户模式下回调,没有额外的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12619695/