1

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

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

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

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

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

还有其他想法吗?

4

2 回答 2

1

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

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

于 2012-09-27T14:07:47.377 回答
0

谢谢大家的有用的想法,

最终,我不小心遇到了RegisterWaitForSingleObject,它似乎就是这样做的。

我仍在考虑@MSalters 关于在给定时间没有足够的空闲工作线程的评论,因为我假设这个回调机制依赖于大多数 Win32API 所做的相同回调机制

于 2012-10-11T13:16:41.300 回答