هل مستمع الأحداث يستخدم وقت وحدة المعالجة المركزية

StackOverflow https://stackoverflow.com/questions/1402069

سؤال

ربما يكون هذا سؤالًا غبيًا، ولكن هل يستخدم مستمعو الأحداث دورات وحدة المعالجة المركزية مثل المؤقت، أم أنهم غير نشطين حتى يتم تشغيل الحدث؟

هل الأمر يتعلق بلغة معينة، أم أن جميع اللغات تتعامل مع هذا الأمر بشكل أساسي بنفس الطريقة؟

أريد أن أكتب خدمة صغيرة لا تفعل أي شيء إلا عند إطلاق حدث قطع اتصال الشبكة، ولا أريد أن تستهلك الخدمة الموارد فقط في الاستماع (بخلاف الذاكرة بالطبع).

أخطط للقيام بشيء مثل هذا

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#، الأحداث هي مجرد مفوضي وظائف (مؤشر إلى وظيفة)، والتي سيتم استدعاؤها "عند الطلب" ولن تستخدم أي دورة إضافية لوحدة المعالجة المركزية.

ولكن، إذا كنت تشير إلى مراقبة الأحداث مثل:

  • OnConnecitonPending لبعض المستمع المقبس.
  • OnWindowMessage لتطبيق النافذة.

أعتقد أن هؤلاء بالتأكيد يستخدمون خيطًا لمراقبة أحداثهم وبالطبع سيكلفون وحدة المعالجة المركزية الإضافية.

نصائح أخرى

والمستمعين الحدث لا تستخدم أي وقت CPU حتى يتم تشغيل الحدث في الواقع (ويسمى معالج الحدث الخاص بك).

وليس هناك عملية خلفية المشاركة مع المستمع الحدث.

وعموما، المستمعين الحدث تتفق مع المدمج في نظام الحدث الاستماع لا تستخدم مرة وحدة المعالجة المركزية حتى يتم تشغيل الحدث. وبدلا من ذلك، فهي المندوبين التي يتم تشغيلها من قبل الحدث. وأشاروا إلى اهتمامهم في هذا الحدث من خلال النظام. هذا هو الأكثر وضوحا، على سبيل المثال، مع وفود الهدف-C / النمط الكاكاو، ولكن المبدأ ينطبق في كل مكان تقريبا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top