Tuesday 19 December 2017

Waitforexit उदाहरण सी प्रोग्राम


मैं प्रक्रिया का उपयोग करता हूं.एक बैच फ़ाइल शुरू करने के लिए प्रारंभ करें बैच फ़ाइल समानांतर में कई प्रोग्राम शुरू करने के लिए START कमांड का उपयोग करती है और फिर बाहर निकलती है। एक बार बैच फ़ाइल की प्रक्रिया हो जाती है। प्रक्रिया समाप्त हो जाती है और प्रक्रिया हो जाती है। एक्सेटकोड में सही निकास कोड होता है। लेकिन जब मैं प्रक्रिया को बुलाता हूं। वेटफॉरएक्सिट () यह कभी भी रिटर्न नहीं देता। कोड का निम्नलिखित भाग समस्या दर्शाता है यह एक बैच फ़ाइल बनाता है, इसे शुरू करता है और फिर प्रिंट करता है: इसे तब प्रिंट करना चाहिए: लेकिन यह कभी नहीं करता (भले ही हेटेक्ज़िटेड सत्य है और हमारे पास पहले से ही एक ExitCode है) मैंने देखा कि यह केवल तभी होता है जब बैच फ़ाइल में स्टार्ट कमांड होते हैं और जब मानक आउटपुट और मानक त्रुटि को रीडायरेक्ट किया जाता है। क्यों WaitForExit () कभी नहीं लौटा है इस प्रक्रिया से बाहर निकलने के लिए इंतजार करने का सही तरीका क्या है यह केवल चुनाव प्रक्रिया के लिए सुरक्षित है। या अन्य परिणाम पीएस में परिणाम हो सकता है। मैंने देखा है कि एक बड़ी समय समाप्ति के साथ प्रतीक्षाकर्ता (100000) को कॉल करना (जो निश्चित रूप से समाप्त नहीं होता है) प्रक्रिया पूरी होने पर तुरंत रिटर्न मिलता है अजीब। समयबाह्य बिना इसे लटका दिया। जब आप टाइम-आउट के बिना WaitForExit () को कॉल करते हैं, तो यह मूलभूत अंतर होता है, यह सुनिश्चित करता है कि पुनर्निर्देशित स्टडॉटर ने आईओएफ वापस कर दिया है। यह सुनिश्चित करता है कि आप प्रक्रिया द्वारा उत्पादित सभी आउटपुट को पढ़ते हैं। हम यह देख सकते हैं कि quotonOutputquot क्या करता है, लेकिन उच्च बाधाएं यह आपके कार्यक्रम को खारिज करती हैं क्योंकि यह मानते हुए कि आपका मुख्य थ्रेड बेकार है, जब यह वास्तव में WaitForExit () में फंस गया है। ndash हंस पासंत 3 नवम्बर 12:06 यह मानक ऑटपुट और स्टैंडर्ड एरर के ईवेंट-आधारित एसिंक्रोनस हैंडलिंग के विशिष्ट कार्यान्वयन में एक आर्टिफैक्ट (आईडी बग) लगता है। मैंने देखा है कि जब तक मैं आसानी से आपकी समस्या को पुन: उत्पन्न करने में सक्षम था, बस आपके द्वारा प्रदान किए गए कोड को चलाने के द्वारा (उत्कृष्ट कोड उदाहरण, जिस तरह से।)), प्रक्रिया वास्तव में अनिश्चित काल तक लटका नहीं आई थी दरअसल, बच्ची की दो प्रक्रियाओं को शुरू होने के बाद, यह प्रतीक्षाफॉरएक्सिट () से लौटा था खुद को बाहर निकल गया था। यह प्रक्रिया वर्ग के कार्यान्वयन का जानबूझकर भाग माना जाता है। विशेष रूप से, Process. WaitForExit () विधि में, प्रक्रिया समाप्त होने के बाद, प्रक्रिया को स्वयं ही संभाल कर लेता है, यह देखने के लिए जांचता है कि क्या स्टडआउट या स्टेडरर के लिए कोई पाठक बनाया गया है यदि ऐसा है, और यदि WaitForExit के लिए टाइमआउट मान ) कॉल अनंत है (यानी -1), वास्तव में पाठक के अंत के लिए इंतजार कर रहा है, पाठक (ओं) पर प्रत्येक संबंधित रीडर को केवल तब ही बनाया जाता है जब BeginOutputReadLine () या BeginErrorReadLine () विधि को कहा जाता है। Stdout और stderr धाराएं स्वयं तक बंद नहीं होती जब तक कि बाल प्रक्रियाओं को बंद नहीं किया जाता है। इसलिए उन धाराओं के अंत तक इंतजार करना बंद हो जाएगा, जब तक ऐसा नहीं होता। वह WaitForExit () को अलग तरीके से व्यवहार करना चाहिए, इसके आधार पर कि क्या किसी ने ऐसे तरीकों को बुलाया है जो धाराओं के ईवेंट-आधारित रीडिंग को शुरू करते हैं या नहीं, और विशेष रूप से उन धाराओं को सीधे पढ़ते हुए प्रतीक्षाफॉरएक्सिट () इस तरह से व्यवहार करने का कारण नहीं है, एपीआई में एक असंगति है जो इसे समझने और उपयोग करने में अधिक मुश्किल बनाता है। जबकि आईडी व्यक्तिगत रूप से इसे एक बग कहते हैं, मुझे लगता है कि यह संभव है कि प्रक्रिया वर्ग के क्रियान्वयनकर्ता इस असंगति से अवगत हैं और इसे उद्देश्य पर बनाया है। किसी भी स्थिति में, एपीआई के ईवेंट-आधारित भाग का उपयोग करने के बजाय कार्य-आसपास मानक-आउटपुट और मानक ईर्रर को सीधे पढ़ना होगा। (हालांकि जाहिर है, यदि उन कोडों पर इंतजार करना होता है, तो एक ही अवरुद्ध व्यवहार को तब तक देखेगा जब तक बच्चे की प्रक्रिया बंद नहीं हो जाती।) उदाहरण के लिए (सी, क्योंकि मुझे एफ़ अच्छी तरह से पता नहीं है कि इस तरह से एक उदाहरण उदाहरण के रूप में थप्पड़ मारना है :)): उम्मीद है कि उपर्युक्त कार्य-आस-पास या कुछ इसी तरह के मूल मुद्दे को संबोधित करेंगे जो आप में चलेंगे मुझे रायटर नाइल्स वोर्गार्ड क्राइस्टेनसेन की प्रतीक्षा करने के लिए प्रतीक्षाफ़ोरेएक्सिट () विधि में समस्याग्रस्त लाइनों पर निर्देशन करने के लिए धन्यवाद, ताकि मैं इस उत्तर को सुधार सकूं। मेरे पास एक सी एप्लिकेशन है जो मैं वीबी से शुरू करना चाहता हूं, मैं ऐसा करने में सक्षम था: Dim startInfo के रूप में ProcessStartInfo Dim pStart के रूप में नई प्रक्रिया startInfo नई ProcessStartInfo (AppDirectory) AppDirectory मेरे सी आवेदन की निर्देशिका है यह सब के पीछे विचार यह है कि मैं एक उपयोगकर्ता इंटरफ़ेस करना चाहता हूँ जो उपयोगकर्ता से कुछ इनपुट लेता है, उन्हें एक पाठ में सहेजें फ़ाइल, सी प्रोग्राम लॉन्च करता है जो पाठ फ़ाइल से जानकारी पढ़ता है और जो करना है वह करना है। समस्या यह है कि जब मैं ऐसा करता हूँ, सी एपिकलन चलती है, लेकिन पाठ फ़ाइल को नहीं पढ़ता है। वास्तव में मैंने एक डमी प्रोग्राम की कोशिश की, जहां मैंने सिर्फ एक सी प्रोग्राम लिखा था जो एक पाठ फ़ाइल से पढ़ता है और बस इसे वीबी से लॉन्च करता है और अभी भी सी प्रोग्राम अभी भी txt फ़ाइल से नहीं पढ़ा था कोई भी विचार (बीटीडब्ल्यू, जब सी सीधे चलाया जाता है (वीबी के माध्यम से नहीं), यह 100 काम करता है) शुक्रवार, 28 दिसंबर 2007 3:01 अपराह्न

No comments:

Post a Comment