事件监听器是否使用CPU时间
-
05-07-2019 - |
题
也许这是一个愚蠢的问题,但是事件侦听器是否像计时器一样使用 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时间。相反,它们是由事件触发的委托。系统注意到他们对此事件的兴趣。这是最明显的,例如,使用Objective-C / Cocoa风格的代表,但该原则几乎适用于所有地方。
不隶属于 StackOverflow