문제

어쩌면 이것은 멍청한 질문이지만 이벤트 청취자는 타이머처럼 CPU 사이클을 사용합니까, 아니면 이벤트가 발사 될 때까지 비활성화됩니까?

언어는 구체적입니까, 아니면 모든 언어가 기본적으로 동일하게 처리합니까?

네트워크 연결 끊김 이벤트가 시작될 때만 수행하는 작은 서비스를 작성하고 싶습니다. 서비스가 듣기 만 (물론 기억 제외)를 사용하는 서비스를 원하지 않습니다.

나는 이런 일을 할 계획이다

using NetworkUtilities;
    ManagementEventWatcher networkAdapterArrivalWatcher = new ManagementEventWatcher("\\root\\wmi","SELECT * FROM MSNdis_NotifyAdapterArrival ");
                    networkAdapterArrivalWatcher.Options.Timeout = new TimeSpan(0,0,5);

    ManagementEventWatcher networkAdapterRemovalWatcher = new ManagementEventWatcher("\\root\\wmi","SELECT * FROM MSNdis_NotifyAdapterRemoval " );
                    networkAdapterRemovalWatcher.Options.Timeout = new TimeSpan(0,0,5);

    ConnectionNotifierHandler handler = new ConnectionNotifierHandler();
                    networkAdapterArrivalWatcher.EventArrived += new EventArrivedEventHandler(handler.Arrived);
                    networkAdapterRemovalWatcher.EventArrived += new EventArrivedEventHandler(handler.Removed);

    //Start watching for events
    networkAdapterArrivalWatcher.Start();
    networkAdapterRemovalWatcher.Start();

    public void Arrived(object sender, EventArrivedEventArgs e)
    {
            using (ManagementBaseObject ev = e.NewEvent)
            {
                //Log the event
            }
    }

    public void Removed(object sender, EventArrivedEventArgs e)
    {
            using (ManagementBaseObject ev = e.NewEvent)
            {
                //Log the event
            }           
    }
도움이 되었습니까?

해결책

C#에서 이벤트는 단지 기능 대의원 (기능에 대한 포인터) 일뿐 아니라 "주문형"이라고 불리며 추가 CPU 사이클을 사용하지 않습니다.

그러나 다음과 같은 이벤트 모니터링을 언급하는 경우

  • OnConnecitonPending 소켓 리스너의 경우.
  • OnWindowMessage 창 응용 프로그램의 경우.

나는 사람들이 스레드를 사용하여 이벤트를 모니터링하며 물론 추가 CPU 비용이들 것입니다.

다른 팁

이벤트 청취자는 이벤트가 실제로 시작될 때까지 CPU 시간을 사용하지 않습니다 (이벤트 핸들러가 호출).

이벤트 청취자와 관련된 배경 프로세스는 없습니다.

일반적으로, 이벤트 청소 시스템을 준수하는 이벤트 청취자는 이벤트가 발사 될 때까지 CPU 시간을 사용하지 않습니다. 오히려 그들은 행사에 의해 유발되는 대표입니다. 이벤트에 대한 관심은 시스템에 의해 언급됩니다. 예를 들어 객관적인 C/Cocoa 스타일 대의원에서는 가장 분명하지만 원칙은 거의 모든 곳에서 적용됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top