Friday, 9 March 2018

Waitforexit - नहीं - वेटिंग - मेम


कोड लगभग सभी की तरह दिखता है: जैसा कि आप देख सकते हैं, कोड एक सीएमडी। एक्ससी प्रक्रिया शुरू करता है और उस आदेश को कार्यान्वित करता है जिसे मैं निष्पादित करना चाहता हूं। मैं कोड से पढ़ने के लिए मानक ईर्रर और स्टैंडऑन आउटपुट को रीडायरेक्ट करता हूं। कोड प्रक्रिया से पहले उन्हें पढ़ता है WaitForExit (टाइमआउट) कॉल के रूप में Microsoft द्वारा अनुशंसित (और बाद में इस पर) समस्या तब उठती है जब मैं cmd. exe को भेजता हूं, कभी भी समाप्त नहीं होता है या अनिश्चित काल तक लटका रहता है। कोड में मैंने कमांड पिंग - t 8.8.8.8 का उपयोग किया था, जो - t ऑप्शन के कारण, बिना रोक के होस्ट को पिंग करता है। क्या होता है cmd. exe प्रक्रिया को ping - t कमांड के साथ कभी नहीं निकलता है और कभी भी stdout स्ट्रीम को बंद नहीं करता है और इसलिए हमारा कोड आउटपुट प्रक्रिया पर लटका हुआ है। StandardOutput. ReadToEnd () लाइन क्योंकि यह सभी स्ट्रीम को पढ़ने में सफल नहीं हो सकता। ऐसा भी होता है कि बैच फ़ाइल में किसी भी आदेश को किसी भी कारण से लटका दिया जाता है और इसलिए उपरोक्त कोड कई सालों तक लगातार काम कर सकता है और फिर बिना किसी स्पष्ट कारण के बिना अचानक लटका सकता है। इससे पहले कि मैंने लिखा था कि इसकी प्रक्रिया से पहले पुनः निर्देशित धाराओं को पढ़ने की सिफारिश की गई है। WaitForExit (टाइमआउट) कॉल, अच्छी तरह से यह विशेष रूप से सही है यदि आप टाइमआउट के बिना WaitForExit हस्ताक्षर का उपयोग करते हैं। यदि आप प्रक्रिया कॉल करते हैं रीडायरेक्ट स्ट्रीम पढ़ने से पहले WaitForExit (): कोड 2: यदि आप cmd. exe से जुड़ते हैं या आप जिस कॉल को कॉल करते हैं, तो मानक आउटपुट या मानक त्रुटि भरने पर आपको डेडलॉक का अनुभव हो सकता है यह इसलिए है क्योंकि हमारे कोड लाइनों तक पहुंच नहीं सकते हैं आउटपुट प्रक्रिया। मानक आउटपुट ReadToEnd () तथ्य की बात के रूप में बाल प्रक्रिया (पिंग कमांड या बैच फाइल या जो भी प्रक्रिया आप निष्पादित कर रहे हैं) खिचड़ी भाषा पर चलती है अगर हमारे प्रोग्राम में धाराओं के भरे बफ़र्स नहीं पढ़ा जाता है और ऐसा नहीं हो सकता क्योंकि कोड पर लटका हुआ है प्रक्रिया के साथ लाइन WaitForExit () जो बच्चे की परियोजना से बाहर निकलने के लिए हमेशा प्रतीक्षा करेंगे। दोनों धाराओं का डिफ़ॉल्ट आकार 4096 बाइट्स है। आप इन दो आकारों की इन बैच फ़ाइलों के साथ परीक्षण कर सकते हैं: पहला स्क्रिप्ट मानक आउटपुट के लिए 4096 बाइट्स लिखता है और मानक त्रुटि के लिए दूसरा है। इनमें से किसी एक को सी में सहेजें: testbuffsize. bat और हमारे प्रोग्राम कॉलिंग प्रक्रिया को चलाने के लिए। आउटपुट प्रक्रिया से पहले waitForExit () मानक आउटपुट कोड 2 में रीडटेन्ड () के रूप में आप इसे कमांड रिंगल्ट परिणाम ExecuteShellCommandSync (c: testbuffsize. bat, 1000) लिखकर कोड 13 की रेखा 13 पर लिख सकते हैं। कोड लटका नहीं है, लेकिन यदि आप दो धाराओं में से किसी एक में एक और बाइट लिखते हैं तो यह बफ़र आकार प्रोग्राम को बनाने से अधिक हो जाएगा लटका। यदि आपको मानक आउटपुट या स्टैंडर त्रुटि को रीडायरेक्ट करने और पढ़ने की आवश्यकता है तो सबसे अच्छा समाधान उन्हें एसिंक्रोनस तरीके से पढ़ना है। ऐसा करने का एक शानदार तरीका मार्क बॉयर्स द्वारा इस स्टैक ओवरफ्लो थैरे में प्रस्तावित किया गया है पिछले बात के अनुसार कृपया ध्यान दें कि अगर बच्चा प्रक्रिया केवल इसलिए निकलती है क्योंकि आप इस प्रक्रिया का उपयोग करते हैं। WaitForExit (टाइमआउट) हस्ताक्षर और यह वास्तव में टाइमआउट में चला जाता है आपको सीएमडी.एक्सए प्रक्रिया और इसके संभावित बच्चों को मारना चाहिए। पढ़ने के लिए कि एमएसडीएन इसके बारे में क्या कहता है: WaitForExit () () () अधिभार वर्तमान धागा बनाने के लिए उपयोग किया जाता है संबंधित प्रक्रिया समाप्त हो जाती है इस विधि से बाहर निकलने की प्रक्रिया के लिए अनंत समय की प्रतीक्षा करने के लिए प्रक्रिया घटक को निर्देश दिया जाता है। इससे एक आवेदन को प्रत्युत्तर देना बंद हो सकता है। उदाहरण के लिए, यदि आप किसी उपयोगकर्ता इंटरफ़ेस के पास प्रोसेक्शन के लिए CloseMainWindow कहते हैं, तो संबंधित प्रक्रिया को समाप्त करने के लिए ऑपरेटिंग सिस्टम के लिए अनुरोध को नियंत्रित नहीं किया जा सकता है यदि प्रक्रिया को कभी भी इसके संदेश लूप में प्रवेश नहीं किया जाता है। यह ओवरलोड सुनिश्चित करता है कि सभी प्रसंस्करण पूर्ण हो गया है, जिसमें रीडायरेक्ट मानक आउटपुट के लिए एसिंक्रोनस इवेंट्स के हैंडलिंग भी शामिल है। जब मानक आउटपुट को एसिंक्रोनस इवेंट हैंडलर पर रीडायरेक्ट कर दिया गया है, तो आपको WaitForExit (Int32) अधिभार के लिए कॉल के बाद इस अधिभार का उपयोग करना चाहिए। यह पाठ्यक्रम के लिए है। क्या आपको लगता है कि यह नोट प्रक्रिया समाप्त करने के लिए इंतजार नहीं करता है कि इसके लक्षण क्या हैं शुक्रवार, फरवरी 20, 2009 8:13 PM यकीन नहीं है कि यह हाल ही में बदल गया है, लेकिन वापस दिन में आवेदन पर खिड़की मोबाइल कभी नहीं वास्तव में बंद जब आप उन्हें बंद करने के लिए एक्स हिट, वे सिर्फ कम से कम और पृष्ठभूमि में चलते रहना होगा (यह एक बग नहीं था, यह एक विशेषता थी, क्योंकि अगली बार जब आप ऐप शुरू करते हैं तो यह वास्तव में तेजी से शुरू होगा, हाँ मुझे पता है, पागल लेकिन सच है) इसलिए ऐसा क्यों हो सकता है कि WaitForExit अजीब व्यवहार कर रहा है और ऐप स्टार्टअप के बजाय बाहर निकलने के लिए इंतजार कर रहा है। लेकिन फिर यह सिर्फ विंडोज़ मोबाइल के प्राचीन संस्करणों के ज्ञानदंड पर आधारित अटकलें हैं। शुक्रवार, 20 फरवरी, 2009 11:03 पीएम आईडी इस सवाल को ऊपर दबाने की तरह। आईएम पर विंडोज़ मोबाइल 6 मानक और आईएम एक ब्राउज़र उदाहरण अंडे की कोशिश कर रहा है। आईडी उपयोगकर्ता तक ब्राउज़र बंद होने तक इंतजार करना पसंद करता है। लेकिन WaitForExit बहुत तेज रिटर्न देता है। यहां कोड है: प्रोसेस पी न्यू प्रोसेस () p. StartInfo. Arguments quotexample-sitequot p. StartInfo. Verb quotOpenquot p. StartInfo. UseShellExecute false p. StartInfo. FileName quotIExplore. exequot. p.start () p. WaitForExit () संदेश बॉक्स. सामने (अब अब ब्राउज़र बंद होना चाहिए) आशा की गई रिसेट को प्राप्त करने का सही तरीका क्या होना चाहिए सोमवार, 08 जून, 2009 10:45 PM कहाँ प्रतीक है प्रतीक। एलेक्स बी मंगलवार, 09 जून, 2009 9:58 PM मैं इसी समस्या को देख रहा हूं, लेकिन एक्सपी पर। मुझे लगता है कि सबूत किसी भी डीबगर (जैसा कि मैं देख रहा हूँ) में देखा जा सकता है या बुधवार, 2 सितंबर, 2009 8:35 पर किसी भी कन्सोल एप्लिकेशन में (जरूरी नहीं कि मोबाइल पर) सिवाय इसके कि आप न तो प्रक्रिया वस्तु प्राप्त करें जो आप कर सकते हैं उपयोग। यदि आप मेरी प्रक्रिया को नई प्रक्रिया के रूप में देखते हैं () myProc प्रक्रिया। प्रारंभ (quotiexplorequot, quotfinance. yahooqhpsquot प्रतीक) myProc. WaitForExit () यह अभी भी तुरंत वापस आता है बुधवार, 02 सितंबर, 2009 8:48 PM आप समस्या है कि आप आई एक्सप्लोर. एक्सए की कोई नई शुरुआत नहीं कर रहे हैं। आप बस मौजूदा प्रक्रिया पर एक नई विंडो बना रहे हैं। मेरा अनुमान है, iexplore. exe प्रारंभ होता है, पिछले उदाहरण को देखता है और पिछले उदाहरण के साथ संचार करता है ताकि वह नई विंडो को खोल सके, और फिर इस आवृत्ति को आपने तुरंत निकाला। इसलिए व्यवहार सही है और उम्मीद की जानी चाहिए। blog. voidnish बुधवार, 02 सितंबर, 2009 8:52 PM माइक्रोसॉफ्ट एमएसडीएन वेब साइट की आपकी राय को समझने के लिए एक ऑनलाइन सर्वेक्षण आयोजित कर रहा है। यदि आप भाग लेना चुनते हैं, तो ऑनलाइन सर्वेक्षण आपको प्रस्तुत किया जाएगा जब आप एमएसडीएन वेब साइट छोड़ देंगे। क्या आप भागीदारी करना चाहेंगे

No comments:

Post a comment