如何从句柄中获取事件的名称

时间:2009-10-14 13:28:59

标签: c++ winapi events handle

我有一个Win32事件句柄数组,我正在等待使用WaitForMultipleObjects()。这将返回触发的事件数组中的索引,但我需要知道的是事件的名称。我一直在寻找MSDN,看不到任何事情要做。

基本上我有一个类通过使用RegNotifyChangeKeyValue()的事件监视注册表一段时间,但是在它启动其他类注册之前,它对键和值感兴趣。然后我等待一个单独的线程并报告已修改的密钥的名称。事件名称是事件所针对的关键字,直到运行时我才知道将会有多少这些事件或将被调用的内容。我不想为每个键创建一个线程,因为它不是非常高效。

有谁知道如何获取活动名称或更好的方法?

3 个答案:

答案 0 :(得分:1)

您可以使用未记录的NT内容来完成,也许NtQueryObject(handle,ObjectNameInformation,....)

答案 1 :(得分:0)

我个人不这样做。在事件和键名之间创建自己的映射(std :: map?),然后在发出事件信号时进行自己的查找。

答案 2 :(得分:0)

通常,事件的名称用于调用OpenEvent()来获取句柄。这样,您不需要在运行时传递句柄,而是根据事件名称的命名约定。

我可以想到三种方法:

  • 遍历所有硬编码的事件名称并调用OpenEvent()
  • 将句柄和名称保存在std :: map
  • 创建一个类来存储句柄和名称(可能在std :: map中),并编写方法以快速从句柄中获取名称。

您是否根据活动名称决定采取什么行动?一个'if else if'语句,逐个检查句柄的名称,以确定要采取的操作?这种情况通常会让我将继承视为一种潜在的解决方案。请跟我一点。

如果你创建一个基类怎么办,比如说EventAction。它有一个事件句柄和一个虚拟成员函数go_go_commandos()。您可以从每个具有要执行操作的“事件”派生它,并在每个派生类的go_go_commandos()方法中实现该操作。

现在你需要的是一个容器,你可以说actionlist-> GetEventAction(handle) - > go_go_commandos()。

有没有帮助?