代码之家  ›  专栏  ›  技术社区  ›  Tester101

事件侦听器是否使用CPU时间

  •  3
  • Tester101  · 技术社区  · 17 年前

    也许这是一个愚蠢的问题,但是事件监听器是像计时器一样使用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
                }           
        }
    
    3 回复  |  直到 17 年前
        1
  •  2
  •   Eran Betzalel    17 年前

    在C中,事件只是函数委托(指向函数的指针),它将被称为“按需”,不会使用任何额外的CPU周期。

    但是,如果您指的是监视事件,例如:

    • OnConnecitonPending 对于某些套接字侦听器。
    • OnWindowMessage 对于窗口应用程序。

    我认为那些确实使用线程来监视他们的事件,当然会花费额外的CPU。

        2
  •  1
  •   Justin Niessner    17 年前

    事件监听器不会使用任何CPU时间,直到实际触发事件(并且调用事件处理程序)。

    事件侦听器不涉及后台进程。

        3
  •  1
  •   phoebus    17 年前

    通常,符合内置事件监听系统的事件监听器在触发事件之前不会使用CPU时间。相反,它们是由事件触发的委托。系统会注意到他们对事件的兴趣。例如,对于Objective-C/Cocoa样式的委托,这是最明显的,但该原则几乎适用于所有地方。