Thursday 15 February 2018

عملية تشخيص النظام مهلة ويتبوريكسيت


System. diagnostics. process مهلة ويتفوريكسيت
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
System. Diagnostics. Process ويتفوريكسيت لا تقتل العملية في مهلة.
تشغيل 7-زيب من رمز # c:
الآن ما أرى يحدث هو أنه عندما يضرب مهلة، لا تزال هناك عملية 7 الرمز البريدي موجود في إدارة المهام. لماذا يحدث ذلك؟ أضع كل من وثيقة والتخلص منها.
يشير سؤالك إلى ثلاث طرق في فئة العملية:
ولن تؤدي أي من هذه الأساليب أي شيء إلى العملية، وبالتأكيد لن تقتلها.
ويتفوريكسيت هو أسلوب الرصد، وسوف ننتظر ونرى ما إذا كانت العملية ينتهي في حد ذاته. سوف الزائد مع مهلة إرجاع بول أقول لك ما إذا كانت الطريقة لاحظت أن إنهاء العملية أم لا. إذا لم يفعل ذلك، فإنه من المفترض أنه لا يزال قيد التشغيل.
إغلاق و ديسبوس لا شيء إلى أو للعملية قيد التشغيل، فإنه مجرد إغلاق مقبض لديك داخليا في فئة العملية التي هي آلية لكيفية أن فئة يمكن أن تبقي علامات التبويب العملية المعنية.
من المفيد إغلاق هذا المقبض عند الانتهاء من مراقبة عملية التشغيل.

جورج بيربيليسzoomicon.
مهندس الحاسوب، ميكروسوفت مفب J # & # 8211؛ R & أمب؛ D 2004-2018، بورلاند سبيريت أوف ديلفي 2001.
غوتشاس في انتظر التطبيق قصف لإنهاء (مع / مهلة الخروج) مع.
جئت عبر عينة دعم ميكروسوفت مفيدة تسمى "كيفية الانتظار لتطبيق مقذوف لإنهاء باستخدام فيسوال باسيك 2005 أو فيسوال باسيك" في support. microsoft/kb/305368.
ومع ذلك، لاحظ أن هناك عدة غوتشاس مع التعليمات البرمجية المقدمة هناك (أبلغت فقط مايكروسوفت على ذلك، ونأمل أن تأخذ إشعار). كما يشير المقال إلى C # وإلى C ++ إصدارات العينة التي تحتاج بوضوح نفس الإصلاحات.
1) هناك & # 8217؛ ق مشكلة في كل من العينة الأولى (الانتظار إلى أجل غير مسمى) والثاني (الانتظار مع مهلة)
& # 8216؛ انتظر حتى تكتمل نافذة العملية التحميل.
& # 8216؛ انتظر حتى تنتهي العملية.
لماذا الانتظار لإدخال الخمول أولا؟ قد لا تدخل العملية أبدا في حالة الخمول والخروج قبل ذلك. وفقا ل msdn. microsoft/en-us/library/8d7363e2(v=VS.90).aspx قد تحصل استثناء من ويتفورينبوتيدل:
حدث خطأ غير معروف. فشلت العملية في إدخال حالة خمول.
لقد خرجت العملية بالفعل.
لا يرتبط أي عملية مع كائن بروسيس هذه.
أفترض أنه من الأفضل تجنب الدعوة ويتفورينبوتيدل على الإطلاق منذ كنت مجرد رعاية ل ويتفوريكسيت هناك.
2) يمكن حتى ويتفوريكسيت رمي ​​الاستثناءات التي يجب أن تحقق التعليمات البرمجية وفقا ل msdn. microsoft/en-us/library/fb4aw7b8.aspx.
لا توجد عملية مقترنة كائن العملية هذه.
أنت تحاول استدعاء ويتفوريكسيت لعملية قيد التشغيل على كمبيوتر بعيد. تتوفر هذه الطريقة فقط للعمليات التي يتم تشغيلها على الكمبيوتر المحلي.
3) لا تذكر المقالة الدعم ما هو مستند ويتفوريكسيت (المهلة) (msdn. microsoft/en-us/library/fb4aw7b8.aspx) حول المهلة "لانهائية":
في الإصدار 3.5 والإصدارات السابقة الإطار، انتظر الزائد ويتفوريكسيت ل ميكسوندو ماكسفالو (حوالي 24 يوما)، وليس إلى أجل غير مسمى. أيضا، الإصدارات السابقة لم تنتظر معالجات الحدث للخروج إذا تم الوصول إلى الوقت ماكسفالو الكامل.
كما يبدو وثائق "ويتفوريكسيت (مهلة)" لا يذكر هناك ثابت time. Infinite أن قيمة -1 لاستخدام لمثل هذه المهلات لانهائية (وجدت من المستند من Thread. Join): msdn. microsoft/ أون لنا / مكتبة / system. threading. timeout. infinite (ت = VS.90).aspx اتصال.
4) فشل عينة لاستدعاء إغلاق وبالتالي تبقي على الموارد الإنفاق لتتبع مقبض (و "تأمين" تلك إدس التعامل الواضح على الرغم من أنها ليست سهلة كما هو الحال في وحدات المعالجة المركزية القديمة وإصدارات نظام التشغيل لنفد من مقابض آمل).
عند إنهاء عملية مقترنة (أي عندما يتم إيقاف تشغيله بواسطة نظام التشغيل من خلال إنهاء عادي أو غير طبيعي)، يقوم النظام بتخزين المعلومات الإدارية حول العملية ويعود إلى المكون الذي كان يسمى ويتفوريكسيت. يمكن لمكون العملية ثم الوصول إلى المعلومات، والتي تتضمن إكسيتيمي، باستخدام مقبض إلى العملية خرجت.
لأن العملية المرتبطة قد خرجت، الخاصية مقبض المكون لم يعد يشير إلى مورد عملية موجود. بدلا من ذلك، يمكن استخدام المقبض فقط للوصول إلى معلومات نظام التشغيل & # 8217؛ حول مورد العملية. النظام على بينة من مقابض للخروج من العمليات التي لم يتم إصدارها من قبل مكونات العملية، لذلك فإنه يحتفظ إكسيتيمي والتعامل مع المعلومات في الذاكرة حتى يقوم مكون العملية بتحرير الموارد على وجه التحديد. لهذا السبب، في أي وقت استدعاء بدء تشغيل مثيل عملية استدعاء إغلاق عند انتهاء العملية المقترنة ولم تعد بحاجة إلى أية معلومات إدارية حول هذا الموضوع. إغلاق يحرر الذاكرة المخصصة لعملية خرجت.
لاحظ أيضا أنه يمكن أن يكون لديك عبارة "استخدام" عند تعريف كائن العملية الجديدة (بدلا من ديم) بدلا من الحاجة صراحة إلى استدعاء "process. Close" في النهاية لتحرير الموارد كما هو موضح في msdn. microsoft/en - لنا / مكتبة / system. diagnostics. process. close (ت = VS.90).aspx اتصال.
يؤدي الأسلوب إغلاق العملية إلى إيقاف انتظار الخروج إذا كان في انتظار، وإغلاق مقبض العملية، ويزيل خصائص عملية محددة. إغلاق لا تغلق الإخراج القياسية، والمدخلات، وقراء الأخطاء والكتاب في حال يتم الرجوع إليها خارجيا.
ديسبوس (منطقية) يدعو المكالمات إغلاق. وضع كائن بروسيس في كتلة استخدام يتصرف الموارد دون الحاجة للاتصال استدعاء.
5) قضية أخرى في العينة 2 (الانتظار مع مهلة). ولا يشير إلى الحاجة إلى الاتصال ويتفوريكسيت () مرة أخرى بدون أي معلمات بعد ويتفوريكسيت (مهلة) في الحالة التي تم فيها إعادة توجيه الإخراج القياسي إلى معالجات الحدث غير المتزامن (يجب ذكر هذه الحالة لاستكمال)
عند إعادة توجيه الإخراج القياسي إلى معالجات أحداث غير متزامنة، فمن الممكن أن معالجة الإخراج لم تكتمل عند إرجاع هذه الطريقة. لضمان اكتمال معالجة الحدث غير المتزامن، استدعاء الزائد ويتفوريكسيت الذي لا يأخذ أي معلمة بعد تلقي صحيح من هذا التحميل الزائد. للمساعدة في ضمان التعامل مع الحدث الذي تم الخروج منه بشكل صحيح في تطبيقات نماذج ويندوز، قم بتعيين الخاصية سينكرونيزينغوبجيكت.

مثال الاستخدام.
أنا حلها بهذه الطريقة:
أنا إعادة توجيه كل من المدخلات والمخرجات والخطأ وتناولت القراءة من الإخراج وتدفقات الخطأ. يعمل هذا الحل ل سك 7-8، سواء بالنسبة ويندوز 7 و ويندوز 8.
حاولت جعل الطبقة التي من شأنها حل مشكلتك باستخدام تيار غير متزامن قراءة، من خلال اتخاذ في حساب علامة بييرز، روب، ستيفيفاي الأجوبة. القيام بذلك أدركت أن هناك خلل المتعلقة غير متزامن الناتج إخراج تيار قراءة.
لا يمكنك القيام بذلك:
سوف تتلقى System. InvalidOperationException: لم تتم إعادة توجيه ستانداردوت أو لم تبدأ العملية حتى الآن.
ثم لديك لبدء إخراج غير متزامن قراءة بعد بدء العملية:
القيام بذلك، جعل حالة سباق لأن تيار الإخراج يمكن أن تتلقى البيانات قبل تعيينه إلى غير متزامن:
ثم بعض الناس يمكن أن أقول أن لديك فقط لقراءة تيار قبل تعيينه إلى غير متزامن. ولكن نفس المشكلة تحدث. سيكون هناك حالة سباق بين قراءة متزامن وتعيين تيار في وضع غير متزامن.
لا توجد طريقة للحصول على قراءة غير متزامنة آمنة من تيار الإخراج من عملية في الطريقة الفعلية "عملية" و "بروسيسستارتينفو" تم تصميم.
ربما كنت أفضل باستخدام قراءة غير متزامن مثل اقترح من قبل المستخدمين الآخرين لحالتك. ولكن يجب أن تكون على علم بأنك يمكن أن تفوت بعض المعلومات بسبب حالة السباق.
أي من الإجابات أعلاه هو القيام بهذه المهمة.
الحل روب معلقة وحل "مارك بييرز 'الحصول على استثناء التخلص منها. (حاولت" حلول "من الإجابات الأخرى).
لذلك قررت أن أقترح حل آخر:
هذا رمز تصحيحها ويعمل تماما.
أنا شيء أن هذا هو نهج بسيط وأفضل (نحن لسنا بحاجة أوتوريزيتيفنت):
كنت تواجه نفس المشكلة، ولكن السبب كان مختلفا. ومع ذلك فإنه يحدث تحت ويندوز 8، ولكن ليس تحت ويندوز 7. يبدو أن السطر التالي قد تسبب في المشكلة.
كان الحل عدم تعطيل وسشليكسكيوت. تلقيت الآن نافذة منبثقة شل، غير المرغوب فيها، ولكن أفضل بكثير من البرنامج في انتظار لا شيء معين أن يحدث. لذلك أضفت العمل التالي حول ذلك:
الآن الشيء الوحيد الذي يزعجني هو لماذا يحدث هذا تحت ويندوز 8 في المقام الأول.
المقدمة.
الإجابة المقبولة حاليا لا تعمل (يلقي استثناء) وهناك الكثير من الحلول ولكن لا يوجد رمز كامل. ومن الواضح أن هذا يضيع الكثير من الوقت الناس لأن هذا هو السؤال الشعبي.
الجمع بين إجابة مارك بييرز وإجابة كارول تيل كتبت الكود الكامل على أساس كيف أريد استخدام الأسلوب Process. Start.
لقد استخدمته لإنشاء الحوار التقدم حول أوامر جيت. هذه هي الطريقة التي استخدمتها:
من الناحية النظرية يمكنك أيضا الجمع بين ستدوت وستدير، ولكن لم اختبر ذلك.
وأنا أعلم أن هذا العشاء القديم ولكن بعد قراءة هذه الصفحة بأكملها لا شيء من الحلول كان يعمل بالنسبة لي، على الرغم من أنني لم أحاول محمد ريحان كما كان من الصعب قليلا على رمز لمتابعة، على الرغم من أنني أعتقد أنه كان على الطريق الصحيح . عندما أقول أنها لم تعمل هذا ليس صحيحا تماما، وأحيانا أنها سوف تعمل بشكل جيد، وأعتقد أنه هو شيء للقيام به مع طول الإخراج قبل علامة إوف.
على أي حال، كان الحل الذي عملت بالنسبة لي لاستخدام المواضيع المختلفة لقراءة ستانداردوتبوت و ستانداردرور وكتابة الرسائل.
نأمل أن يساعد هذا الشخص، الذي يعتقد أن هذا يمكن أن يكون من الصعب جدا!
الحلول الأخرى (بما في ذلك EM0 في) لا يزال مسدودا لتطبيقي، بسبب مهلات الداخلية واستخدام كل من ستانداردوتبوت و ستانداردرور من تطبيق ولدت. هنا هو ما عمل لي:
تحرير: إضافة التهيئة من ستارتينفو إلى نموذج التعليمات البرمجية.
هذه الوظيفة ربما عفا عليها الزمن ولكن اكتشفت السبب الرئيسي لماذا عادة تعليق هو بسبب تجاوز كومة ل ريديريكتستانداردوتبوت أو إذا كان لديك ريديريكتستانداردورور.
كما بيانات الإخراج أو بيانات الخطأ كبيرة، وسوف يسبب وقت تعليق لأنه لا يزال يعالج لمدة غير محددة.

System. diagnostics. process مهلة ويتفوريكسيت
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
Process. WaitForExit (Int32)
الآن أنا أعمل على تطبيق عداء وحدة التحكم التي تحتوي على التعليمات البرمجية التالية لإخراج السجل والانتظار حتى يتم الانتهاء من العملية:
لدي سؤالان حول هذه القطعة من التعليمات البرمجية.
لاحظت أنه إذا كانت العملية تستغرق وقتا أطول من 30 ثانية، والقنابل دعوة p. ExitCode. ماذا يحدث إذا كانت عمليتي تستغرق ثانية واحدة فقط، فهل ستنتظر 30 ثانية على أي حال أو سيتم إبلاغ العملية من قبل كلر؟
إذا حاولت الحصول على إكسيتكود قبل الخروج من العملية، محاولة يلقي استثناء. فحص الخاصية هاسكسيتد أولا للتحقق مما إذا كان قد تم إنهاء العملية المقترنة.
ليس هناك ما يضمن أنه عندما عودتك إلى ويتفوريكسيت يعود، فإن العملية قد خرجت. من وثائق ويتفوريكسيت:
يتم استخدام الزائد ويتفوريكسيت (Int32) لجعل الانتظار مؤشر الترابط الحالي حتى ينتهي العملية المقترنة. يؤدي هذا التحميل الزائد إلى توجيه مكون العملية إلى انتظار مقدار محدود من الوقت لإنهاء العملية. إذا لم يتم إنهاء العملية المقترنة بنهاية الفترة الزمنية بسبب رفض طلب الإنهاء، يتم إرجاع فالس إلى إجراء الاستدعاء. يمكنك تحديد رقم سالب (لانهائي) ل ميلي ثانية، و process. WaitForExit (Int32) سوف يتصرف نفس الزائد ويتفوريكسيت (). إذا قمت بتمرير 0 (صفر) إلى الأسلوب، فإنه يرجع صحيح فقط إذا كانت العملية قد خرجت بالفعل؛ وإلا فإنه يعود فورا كاذبة.
لاحظ أن هذا يجيب على السؤال الثاني. في حالة انتهاء العملية قبل انتهاء المهلة، ترجع ويتفوريكسيت.
نظرا لأنك حددت مهلة محددة، فإنك تسمح باحتمال عودة الدالة قبل انتهاء العملية. لذلك، يمكنك كتابة التعليمات البرمجية الخاصة بك مثل هذا:

معالجة . طريقة ويتفوريكسيت (Int32)
تحتوي الوثائق المرجعية أبي على منزل جديد. انتقل إلى متصفح أبي على docs. microsoft للاطلاع على التجربة الجديدة.
يرشد مكون العملية إلى الانتظار لعدد الملي ثانية المحدد للعملية المقترنة للخروج.
الجمعية: النظام (في System. dll)
المعلمات.
مقدار الوقت، بالمللي ثانية، لانتظار انتهاء العملية المقترنة. الحد الأقصى هو أكبر قيمة ممكنة لعدد صحيح 32 بت، والذي يمثل اللانهاية لنظام التشغيل.
قيمة الإرجاع.
صحيح إذا خرجت العملية المرتبطة بها؛ خلاف ذلك، كاذبة.
تعذر الوصول إلى إعداد الانتظار.
لم يتم تعيين معرف العملية، ولا يمكن تحديد التعامل الذي يمكن تحديد الخاصية إد.
لا توجد عملية مقترنة كائن العملية هذه.
أنت تحاول الاتصال ويتفوريكسيت (Int32) لعملية قيد التشغيل على كمبيوتر بعيد. تتوفر هذه الطريقة فقط للعمليات التي يتم تشغيلها على الكمبيوتر المحلي.
ويتفوريكسيت (Int32) يجعل الانتظار مؤشر الترابط الحالي حتى ينتهي العملية المقترنة. وينبغي أن يسمى بعد أن يتم استدعاء جميع الطرق الأخرى على العملية. لتجنب حظر مؤشر الترابط الحالي، استخدم الحدث الذي تم الخروج منه.
تقوم هذه الطريقة بتوجيه مكون العملية لانتظار مقدار محدود من الوقت لإنهاء العملية. إذا لم يتم إنهاء العملية المقترنة بنهاية الفترة الزمنية بسبب رفض طلب الإنهاء، يتم إرجاع فالس إلى إجراء الاستدعاء. يمكنك تحديد رقم سلبي (لانهائي) لميلي ثانية، وعملية. سوف يتصرف ويتفوريكسيت (Int32) نفس الزائد ويتفوريكسيت (). إذا قمت بتمرير 0 (صفر) إلى الأسلوب، فإنه يرجع صحيح فقط إذا كانت العملية قد خرجت بالفعل؛ وإلا فإنه يعود فورا كاذبة.
في الإطار 3.5 والإصدارات السابقة، إذا كان ميلي ثانية واحدة -1، انتظر التحميل الزائد ويتفوريكسيت (Int32) ل ماكسفالو ميلي ثانية (حوالي 24 يوما)، وليس إلى أجل غير مسمى.
عند إعادة توجيه الإخراج القياسي إلى معالجات أحداث غير متزامنة، فمن الممكن أن معالجة الإخراج لم تكتمل عند إرجاع هذه الطريقة. لضمان اكتمال معالجة الحدث غير المتزامن استدعاء الزائد ويتفوريكسيت () الذي لا يأخذ أي معلمة بعد تلقي صحيح من هذا التحميل الزائد. للمساعدة في ضمان التعامل مع الحدث الذي تم الخروج منه بشكل صحيح في تطبيقات نماذج ويندوز، قم بتعيين الخاصية سينكرونيزينغوبجيكت.
عند إنهاء عملية مقترنة (يتم إيقاف تشغيلها بواسطة نظام التشغيل من خلال إنهاء عادي أو غير طبيعي)، يخزن النظام المعلومات الإدارية حول العملية ويعود إلى المكون الذي كان يسمى ويتفوريكسيت (Int32). يمكن لمكون العملية ثم الوصول إلى المعلومات، والتي تتضمن إكسيتيمي، باستخدام مقبض إلى العملية خرجت.
لأن العملية المرتبطة قد خرجت، الخاصية مقبض المكون لم يعد يشير إلى مورد عملية موجود. بدلا من ذلك، يمكن استخدام المقبض فقط للوصول إلى معلومات نظام التشغيل حول مورد العملية. النظام على بينة من مقابض للخروج من العمليات التي لم يتم إصدارها من قبل مكونات العملية، لذلك فإنه يحتفظ إكسيتيمي والتعامل مع المعلومات في الذاكرة حتى يقوم مكون العملية بتحرير الموارد على وجه التحديد. لهذا السبب، في أي وقت استدعاء بدء تشغيل مثيل عملية استدعاء إغلاق عند انتهاء العملية المقترنة ولم تعد بحاجة إلى أية معلومات إدارية حول هذا الموضوع. إغلاق يحرر الذاكرة المخصصة لعملية خرجت.
راجع مثال التعليمات البرمجية الخاصية إكسيتكود.
للحصول على الثقة الكاملة للمتصل الفوري. لا يمكن استخدام هذا العضو من خلال شفرة موثوق بها جزئيا.

No comments:

Post a Comment