Tuesday 19 December 2017

برنامج ويتوفوريكسيت سبيل المثال c


ابدأ استخدام process. Start لبدء ملف دفعي. يستخدم ملف الدفعي الأمر ستارت لبدء عدة برامج بالتوازي ثم الخروج. بمجرد الانتهاء من ملف الدفعي يصبح process. HasExited ترو و process. ExitCode يحتوي على رمز الخروج الصحيح. ولكن عندما أدعو process. WaitForExit () أنه يتعطل أبدا يعود. الجزء التالي من التعليمات البرمجية يوضح المشكلة. فإنه يخلق ملف دفعي، يبدأ ثم ثم يطبع: يجب أن ثم طباعة: لكنه لم يفعل (على الرغم من هاسكسيتد صحيح ولدينا بالفعل إكسيتكود). لقد لاحظت أن هذا يحدث فقط عندما يحتوي ملف دفعي على أوامر ستارت وعندما يتم إعادة توجيه الإخراج القياسي و أندور القياسية. لماذا ويتفوريكسيت () لا يعود ما هي الطريقة الصحيحة للانتظار لمثل هذه العملية للخروج هل هو آمن لعملية الاستطلاع فقط. هاسيكسيتد أو يمكن أن يؤدي إلى مشاكل أخرى بس. لاحظت فقط أن استدعاء ويتفوريكسيت (100000) مع مهلة ضخمة (التي لا تنتهي بالتأكيد) يعود على الفور عند خروج العملية. غريب. دون مهلة أنها معلقة. هناك فرق أساسي عند استدعاء ويتفوريكسيت () دون مهلة، فإنه يضمن أن ستدوترر المعاد توجيهها إوف. وهذا يجعل متأكد من أنك 39 قراءة جميع الإخراج الذي تم إنتاجه من قبل هذه العملية. نحن can39t نرى ما كوتونوتبوتكوت يفعل، ولكن احتمالات عالية أنه ديادلوكس البرنامج لأنه يفعل شيئا مقرف مثل افتراض أن الموضوع الرئيسي الخاص بك هو الخمول عندما يكون عالقا في الواقع في ويتفوريكسيت (). نداش هانز باسانت نوف 3 14 في 12:06 ويبدو أن هذا قطعة أثرية (إد يقول علة) في تنفيذ محدد من التعامل مع غير المتزامن القائم على الحدث من ستانداردوتبوت و ستانداردرور. لاحظت أنه في حين كنت قادرا على تكرار المشكلة بسهولة، ببساطة عن طريق تشغيل التعليمات البرمجية التي قدمتها (مثال رمز ممتاز، بالمناسبة.))، فإن العملية لم يعلق في الواقع إلى أجل غير مسمى. بدلا من ذلك، عاد من ويتفوريكسيت () مرة واحدة كل من العمليات الطفل التي بدأت قد خرجوا أنفسهم. ويبدو أن هذا جزء متعمد من تنفيذ فئة العملية. على وجه الخصوص، في طريقة Process. WaitForExit ()، بمجرد الانتهاء من الانتظار على مقبض العملية نفسها، فإنه يتحقق لمعرفة ما إذا كان قد تم إنشاء قارئ إما ستدوت أو ستدر إذا كان الأمر كذلك، وإذا كانت قيمة المهلة ل ويتفوريكسيت ) نداء لانهائي (أي -1)، رمز ينتظر فعلا لنهاية تيار على القارئ (ق). يتم إنشاء كل قارئ منها فقط عندما يتم استدعاء الأسلوب بيجينوتبترادلين () أو بيجينيرورادلين (). و ستدوت والجداول ستدير هي نفسها ليست مغلقة حتى أغلقت عمليات الطفل. حتى الانتظار في نهاية تلك الجداول سوف كتلة حتى يحدث ذلك. أن يتفوريكسيت () يجب أن تتصرف بشكل مختلف اعتمادا على ما إذا كان أحد قد دعا إما من الأساليب التي تبدأ القراءة القائم على الحدث من تيارات أم لا، وخصوصا بالنظر إلى أن قراءة تلك التدفقات مباشرة لا يسبب ويتفوريكسيت () على التصرف بهذه الطريقة، يخلق عدم الاتساق في أبي الذي يجعل من الصعب فهمها واستخدامها. في حين إد شخصيا استدعاء هذا الخلل، وأعتقد أن من الممكن أن منفذي (ق) من الطبقة العملية على بينة من هذا التناقض وخلقها عن قصد. في أي حال، فإن العمل حول سيكون لقراءة ستانداردوتبوت و ستانداردورور مباشرة بدلا من استخدام جزء الحدث القائم على أبي. (على الرغم من بطبيعة الحال، إذا كان رمز تلك كانت تنتظر على تلك التدفقات، واحد سوف نرى نفس السلوك حظر حتى الطفل يعالج قريبة). على سبيل المثال (C، لأنني لا أعرف F كافية بما فيه الكفاية لصف مثال رمز مثل هذا معا بسرعة :)): نأمل أن العمل أعلاه حول أو شيء من هذا القبيل سوف تعالج القضية الأساسية كنت قد واجهت. شكرا لي للمعلق نيلز فورغارد كريستنسن لتوجيهي إلى خطوط إشكالية في طريقة ويتفوريكسيت ()، حتى أتمكن من تحسين هذه الإجابة. أنا لديك تطبيق C الذي أريد أن أبدأ من ف كنت قادرا على القيام بذلك بهذه الطريقة: ديم ستارتينفو كما بروسستارتينفو ديم بستارت كما عملية جديدة ستارتينفو عملية جديدة ستارتينفو (أبدركتوري) أبدركتوري هو دليل تطبيق C الفكرة وراء كل هذا هو أنني أريد أن تفعل واجهة المستخدم التي تأخذ بعض المدخلات من المستخدم وحفظها في نص ملف، وإطلاق برنامج C الذي يقرأ المعلومات من ملف نصي والقيام بما يفترض القيام به. والمشكلة هي أنه عندما أفعل هذا، يتم تشغيل أبليكاتيون C، ولكن لا يقرأ الملف النصي. في الواقع حاولت برنامج وهمية، حيث أنا فقط كتبت برنامج C الذي يقرأ من ملف نصي وببساطة إطلاقه من ف وما زال برنامج C لا تزال لم تقرأ من ملف تكست أي أفكار. (راجع للشغل، عندما يتم تشغيل C مباشرة (وليس من خلال ف)، يعمل 100) الجمعة 28 ديسمبر 2007 3:01 م

No comments:

Post a Comment