2009-10-14 4 views
2

WaitForMultipleObjects()를 사용하여 대기중인 Win32 이벤트 핸들 배열이 있습니다. 이것은 트리거 된 이벤트 배열에서 인덱스를 반환하지만 내가 알아야 할 것은 이벤트의 이름입니다. 나는 MSDN을 통해보고 있었고 아무 것도 이것을 할 수 없습니다.핸들에서 이벤트 이름을 얻는 방법

기본적으로 RegNotifyChangeKeyValue()를 사용하여 이벤트를 통해 레지스트리를 모니터링하는 클래스가 정의 된 시간 동안 있지만 다른 클래스를 시작하기 전에 키와 값에 관심을 등록합니다. 그런 다음 별도의 스레드에서 기다렸다가 수정 된 키의 이름을 다시보고합니다. 이벤트 이름은 이벤트가있는 키이며, 런타임까지 얼마나 많은 이벤트가 있는지 또는 호출 될 항목을 알지 못합니다. 별로 성능이 좋지 않으므로 키당 하나의 스레드를 만들고 싶지 않습니다.

누구든지 이벤트 이름을 얻는 방법이나 더 나은 방법을 알고 있습니까?

답변

0

개인적으로 나는 그렇게하지 않을 것입니다. 이벤트와 키 이름 사이에 자체 맵핑 (std :: map?)을 작성한 다음 이벤트가 신호를 받으면 자체 조회를 수행하십시오.

+0

이것이 현재의 계획입니다. 매우 우아하지는 않습니다. –

+0

이 상황에서 맵은 과장 될 수 있습니다. 벡터는 잘 작동합니다. WMFO에 전달한 배열의 해당 핸들과 동일한 순서로 이름을 벡터에 넣으면됩니다. 그런 다음 WMFO에서 반환 된 색인은 이름에 대한 색인 역할을합니다. –

+1

지도는 두 개의 배열을 수동으로 정렬하는 것보다 낫습니다. 오버 헤드는 중요하지 않습니다. – Kieveli

0

일반적으로 이벤트의 이름은 OpenEvent()를 호출하여 핸들을 가져 오는 데 사용됩니다. 이렇게하면 런타임에 핸들을 전달할 필요가 없으며 대신 이벤트 이름의 명명 규칙을 따르게됩니다. OpenEvent가를

  • 루프를 통해 모든 하드 코딩 된 이벤트 이름과 전화()
  • 저장 성병의 핸들과 이름 ::지도
  • :이 작업을 수행하는 세 가지 방법의

    을 생각할 수 핸들과 이름 (std :: map에있을 수 있음)을 저장하는 클래스를 만들고 핸들에서 이름을 빠르게 가져올 수있는 메서드를 작성합니다.

이벤트 이름을 기반으로 수행 할 작업을 결정 했습니까? 핸들의 이름을 하나씩 검사하여 취할 조치를 결정하는 'if else if'문은 무엇입니까? 이런 종류의 시나리오는 대개 상속을 잠재적 인 해결책으로 생각하게합니다. 나와 조금 곰.

기본 클래스를 만드는 경우, EventAction을 말하십시오. 이것은 이벤트에 대한 핸들과 가상 멤버 함수 go_go_commandos()를가집니다. 수행 할 조치가있는 각 '이벤트'에 대해이를 파생시키고 각 파생 클래스의 go_go_commandos() 메소드에서 조치를 구현하십시오.

이제 컨테이너가 필요하므로 actionlist-> GetEventAction (handle) -> go_go_commandos()를 말할 수 있습니다.

도움이 되었습니까?

+0

나는 당신이 무엇을 얻고 있는지 보았습니다. 그러나 제가하려고하는 것은 값에 대해서만 레지스트리 감시자를 가지며 키 아래에서 값의 변화에 ​​대해 알고 싶어하는 여러 객체를 가지고 있습니다. 그래서 관련 키를보고 관심이있는 객체로만 변경된 값을 처리해야합니다. 그 말이 맞는다면. Win32는 키를 볼 때만이 기능을 제공하지 않습니다. –

+0

나는 핸들이 주어진 이벤트의 이름에 대한 조회를 왜하는지 알고 싶지 않다고 생각한다. – Kieveli

+0

OpenEvent()에서 사용 가능한 이름을 사용하지 마십시오. 이렇게하면 해당 이름을 사용하여 개체가 프로세스간에 공유됩니다. lpsa가 NULL 인 경우, 객체는 조작이 활발 해지고 보안 구멍이 생깁니다. Len Holgate의지도 아이디어는 매우 간단합니다. 나는 그 길로 갈 것입니다. –

1

아마 문서화되지 않은 NT 작업 일 수도 있습니다. NtQueryObject(handle,ObjectNameInformation,....)

+1

당신이 이것을 할 수 있다는 것을 아는 것이 유용하다; 하지만 정말하고 싶지는 않아. –

관련 문제