معرفة ما إذا كان "مرور" موضوع الحدث لا يزال قيد التشغيل؟

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

  •  05-07-2019
  •  | 
  •  

سؤال

وبالنظر إلى System.Timers.Timer، هل هناك طريقة من الخيط الرئيسي لمعرفة ما إذا كان موضوع عامل تشغيل رمز الحدث المنقضي لا يزال قيد التشغيل؟

في بعبارة أخرى، كيف يمكن للمرء أن تأكد من أن شفرة تشغيل في ترابط عامل ليست قيد التشغيل حاليا قبل وقف مؤقت أو التطبيق / الخدمة الرئيسية الخيط هو توقيت تشغيل في؟

هل هذه مسألة التخلص الموقت للخيوط الموقت باستخدام أحدث، أم أنها مجرد الوقت لاستخدام المواضيع مباشرة؟

هل كانت مفيدة؟

المحلول

وابحث عن ManualResetEvent، ويتم ذلك للقيام على وجه التحديد ما كنت طالبا.

والمواضيع ديك خلق حالة إعادة تعيين جديد، وإضافته إلى قائمة انتظار الوصول التي يمكن استخدامها الترابط الرئيسي لمعرفة إن وجدت المواضيع لا تزال قيد التشغيل.

// main thread owns this
private List<ManualResetEvent> _resetEvents;
...
// main thread does this to wait for executing threads to finish
WaitHandle.WaitAll(_resetEvents.ToArray(), 2000, false)
...
// worker threads do this to signal the thread is done
myResetEvent.Set();

وأستطيع أن أعطي لكم المزيد من التعليمات البرمجية إذا كنت تريد، ولكن أنا في الأساس مجرد نسخه من المواد زوجين قرأت عندما أتيحت لي للقيام بذلك قبل عام أو نحو ذلك.


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

...
ThreadPool.QueueUserWorkItem(new WaitCallback(MyWorkerDelegate),
  myCustomObjectThatContainsAResetEvent);

نصائح أخرى

لللخروج من مربع الحل، لا توجد وسيلة. والسبب الرئيسي هو موضوع يشغل وظيفة TimerCallback في جميع الاحتمالات لا تزال على قيد الحياة حتى لو اكتمال التعليمات البرمجية تشغيل الاستدعاء. يتم تنفيذ TimerCallback قبل الموضوع من ThreadPool. عند الانتهاء من مهمة موضوع لا يموت، ولكن بدلا من ذلك يعود إلى قائمة الانتظار للقيام بهذه المهمة ترابط التجمع القادمة.

في أجل الحصول على هذا العمل الخاص ستكون لدينا لاستخدام طريقة موضوع إشارات آمنة للكشف عن اكتمال العملية.

الموقت الوثائق

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