Прослушиватель событий использует процессорное время - PullRequest
3 голосов
/ 10 сентября 2009

Может быть, это глупый вопрос, но используют ли слушатели событий циклы ЦП, как таймер, или они неактивны, пока не сработает событие?

Это специфический язык или все языки в основном одинаковы?

Я хочу написать крошечный сервис, который будет делать что-либо, только когда происходит событие отключения сети, и я не хочу, чтобы сервис использовал ресурсы, просто слушая (кроме памяти, конечно).

Я планирую сделать что-то подобное

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
            }           
    }

Ответы [ 3 ]

2 голосов
/ 10 сентября 2009

В C # события - это просто делегаты функций (указатель на функцию), которые будут вызываться «по требованию» и не будут использовать дополнительный цикл ЦП.

НО, если вы имеете в виду такие события мониторинга, как:

  • OnConnecitonPending для некоторого слушателя сокета.
  • OnWindowMessage для оконного приложения.

Я думаю, что те, кто использует поток, отслеживают свои события и, конечно, будут стоить дополнительного процессора.

1 голос
/ 14 сентября 2009

Как правило, прослушиватели событий, соответствующие встроенной системе прослушивания событий, не используют процессорное время, пока событие не будет запущено. Скорее, они являются делегатами, которые запускаются событием. Их интерес к событию отмечается системой. Это наиболее очевидно, например, для делегатов в стиле Objective-C / Cocoa, но этот принцип применяется практически везде.

1 голос
/ 10 сентября 2009

Прослушиватели событий не используют процессорное время, пока событие не будет запущено (и не будет вызван ваш обработчик событий).

Нет фонового процесса, связанного с прослушивателем событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...