我有一个Win32事件句柄数组,我正在等待使用WaitForMultipleObjects()。这将返回触发的事件数组中的索引,但我需要知道的是事件的名称。我一直在寻找MSDN,看不到任何事情要做。
基本上我有一个类通过使用RegNotifyChangeKeyValue()的事件监视注册表一段时间,但是在它启动其他类注册之前,它对键和值感兴趣。然后我等待一个单独的线程并报告已修改的密钥的名称。事件名称是事件所针对的关键字,直到运行时我才知道将会有多少这些事件或将被调用的内容。我不想为每个键创建一个线程,因为它不是非常高效。
有谁知道如何获取活动名称或更好的方法?
答案 0 :(得分:1)
您可以使用未记录的NT内容来完成,也许NtQueryObject(handle,ObjectNameInformation,....)
答案 1 :(得分:0)
我个人不这样做。在事件和键名之间创建自己的映射(std :: map?),然后在发出事件信号时进行自己的查找。
答案 2 :(得分:0)
通常,事件的名称用于调用OpenEvent()来获取句柄。这样,您不需要在运行时传递句柄,而是根据事件名称的命名约定。
我可以想到三种方法:
您是否根据活动名称决定采取什么行动?一个'if else if'语句,逐个检查句柄的名称,以确定要采取的操作?这种情况通常会让我将继承视为一种潜在的解决方案。请跟我一点。
如果你创建一个基类怎么办,比如说EventAction。它有一个事件句柄和一个虚拟成员函数go_go_commandos()。您可以从每个具有要执行操作的“事件”派生它,并在每个派生类的go_go_commandos()方法中实现该操作。
现在你需要的是一个容器,你可以说actionlist-> GetEventAction(handle) - > go_go_commandos()。
有没有帮助?