Waitforexit उदाहरण सी स्रोत


एलीना: आपके उत्तर के लिए धन्यवाद। इस MSDN डॉक्टर (msdn. microsoften-uslibraryhellip) के निचले भाग में कुछ नोट्स हैं जो संभावित डेडलॉक के बारे में चेतावनी देते हैं यदि आप दोनों रीडायरेक्ट किए गए स्टडआउट और स्टर्डर धाराओं के अंत में पढ़ते हैं तो सिंक्रोनस रूप से। यह कहना मुश्किल है कि क्या आपका समाधान इस मुद्दे के लिए अतिसंवेदनशील है। साथ ही, ऐसा प्रतीत होता है कि आप प्रक्रिया 39 stdoutstaderr आउटपुट को वापस इनपुट के रूप में भेज रहे हैं। क्यूं कर। ) ndash मैथ्यू पियाट 26 सितंबर 16 4:42 यह 4.5 और बाद के संस्करण के लिए एक और आधुनिक उम्मीदवार, कार्य समानांतर पुस्तकालय (टीपीएल) आधारित समाधान है। उपयोग का उदाहरण कार्यान्वयन 5 अक्टूबर को 10 बजे उत्तर दिया गया I बात यह है कि यह सरल और बेहतर तरीका है (हमें ऑटोआरससेट एवेन्ट की ज़रूरत नहीं है): उत्तर 14 जून 12 बजे 14:29 उत्तर दिया गया है, लेकिन आप ऐसा नहीं करना चाहिए. फ़ाइलनाम पथ quotggsci. exequot quot अपने कोड को सरल बनाने के लिए या शायद कुछ quotecho कमांड के बराबर path quotggsci. exequot का पालन करने के लिए obeycommand. txtquot का पालन करें अगर आप वास्तव में एक अलग obeycommand. txt फ़ाइल का उपयोग नहीं करना चाहते हैं ndash Amit Naidu Jun 4 13 at 22:03 आपके समाधान में ऑटोआरससेटएवेंट की ज़रूरत नहीं है लेकिन आप चुनाव करते हैं। जब आप इवेंट का उपयोग करने के बजाय पोल करते हैं (जब वे उपलब्ध होते हैं) तो आप बिना किसी कारण के लिए सीपीयू का उपयोग कर रहे हैं और इससे पता चलता है कि आप खराब प्रोग्रामर हैं AutoResetEvent का उपयोग करते हुए अन्य के साथ तुलना में आपका समाधान वास्तव में खराब है। (लेकिन मैंने आपको -1 नहीं दिया क्योंकि आपने मदद करने की कोशिश की है)। ndash एरिक Ouellet 7 नवंबर 14 पर 18:38 मैं एक ही मुद्दा रहा था, लेकिन कारण अलग था हालांकि यह विंडोज 8 के तहत होगा, लेकिन विंडोज 7 के तहत नहीं। निम्नलिखित पंक्ति ने समस्या का कारण देखा है। समाधान UseShellExecute को अक्षम करने के लिए नहीं था अब मुझे एक शेल पॉपअप विंडो मिली है, जो अवांछित है, लेकिन कुछ खास नहीं होने की प्रतीक्षा करने वाले कार्यक्रम से बेहतर है। इसलिए मैंने इसके लिए निम्नलिखित काम जोड़ा: अब मुझे केवल परेशानी का कारण यह है कि विंडोज 8 के तहत यह पहली जगह पर क्यों हो रहा है। 13 जनवरी को 10:35 को उत्तर दिया मैंने एक ऐसा वर्ग बनाने की कोशिश की जो आपकी समस्या को हल करेगी जो अकसरसोनस स्ट्रीम का उपयोग करते हुए मार्क बियरर्स, रोब, स्टीवज्यू उत्तर लेते हुए आपकी समस्या को हल करेंगे। ऐसा करने से मुझे एहसास हुआ कि एसिंक्रोनस प्रोसेस आउटपुट स्ट्रीम से संबंधित एक बग पढ़ा गया है। आप ऐसा नहीं कर सकते: आपको सिस्टम प्राप्त होगा। अज्ञातऑपरेशन अपवाद मानकऑटो को पुनः निर्देशित नहीं किया गया है या प्रक्रिया अभी तक शुरू नहीं हुई है। फिर आपको प्रक्रिया शुरू होने के बाद एसिंक्रोनस आउटपुट को पढ़ना होगा: ऐसा करने से, रेस की स्थिति बनाओ क्योंकि आउटपुट स्ट्रीम आपको एसिंक्रोनस में सेट करने से पहले डेटा प्राप्त कर सकता है: तब कुछ लोग कह सकते हैं कि आपको स्ट्रीम से पहले ही पढ़ना होगा इसे अतुल्यकालिक से सेट करें लेकिन यही समस्या तब होती है तुल्यकालिक पढ़ने के बीच एक दौड़ की स्थिति होगी और स्ट्रीम को अतुल्यकालिक मोड में सेट किया जाएगा। वास्तविक प्रक्रिया में एक प्रक्रिया के आउटपुट स्ट्रीम के सुरक्षित असिंक्रोनस पठन को प्राप्त करने का कोई तरीका नहीं है, प्रक्रिया और प्रक्रिया स्टार्टइन्फो तैयार की गई है। आप संभावित रूप से अतुल्यकालिक पठन का उपयोग कर रहे हैं जैसे आपके केस के लिए अन्य उपयोगकर्ताओं द्वारा सुझाई गई। लेकिन आपको पता होना चाहिए कि आप दौड़ की स्थिति के कारण कुछ जानकारी याद कर सकते हैं। स्थायी कैसे है WaitForExit () इसका मतलब यह है कि विकल्प का कोई भी विकल्प प्रतीक्षा को तोड़ने के लिए कर सकता है अन्यथा मैं अपने धागे को एक अलग समारोह में चलाऊंगा और इसे वैश्विक चर से नियंत्रित कर दूंगा। कारण - एक सीएमडी.एक्सई धागा, एक कंसोल अनुप्रयोग चल रहा है, जिसके चलते हम थ्रेड के पाठ्यक्रम से पहले ही रद्द करना चाहते हैं। यहां हमारे पास क्या है: प्रोसेस्टस्टाईटफ़ोई पीएसआई नई प्रोसेस्टस्टाइनफ़ो (उद्धरण सीएमडी.EXEquot, क्वेरी) psi. UseShellExecute उपयोग शेलएक्सएक psi. RedirectStandardOutput stdout psi. CreateNoWindow noWindow hbProc नई प्रक्रिया () hbProc प्रक्रिया। प्रारंभ (पीएसआई) hbProc. WaitForExit () ठीक है, आप कर सकते हैं उपयोग: जबकि (hbProc. WaitForExit (someTimeout)) अगर (दंडनैनल) को 1 9 सितंबर को 5:15 बजे टूट जाता है, तोक्मार्क ग्रेवैलक्ॉट ltmarc. grav। जीटी ने लिखा: gt अच्छी तरह से, आप इसका इस्तेमाल कर सकते हैं: gt gt जबकि (hbProc. WaitForExit (कुछ टाइमआउट)) gt (ifCancel) को gt gt gt gt gt मार्क (नोट करें), दोनों नई प्रक्रिया () और प्रक्रिया को कॉल करने का कोई कारण नहीं है प्रारंभ करें (पीएसआई) या आप इसका इस्तेमाल कर सकते हैं: एचबीपीआरसी नई प्रक्रिया () एचबीप्रक्र। सक्षम रीसाइजिंग ईवेंट्स सच्चे एचबीप्रक्र. एक्सित न्यू इवेंटहान्डलर (फ़ंक्शनटोकैल्फाप्रोसिट) एचबीप्रक्र। स्टार्टइन्फो पीएसआई एचबीप्रक्र। स्टार्ट () अन्य धागा- पर ईवेंट रद्द करना चाहते हैं: एचबीपीआरसी - नया इवेंटहैंडलर functionToCallAfterProcesit) किसी भी मामले में, बस प्रक्रिया समाप्त होने और प्रतीक्षा रद्द करने की इच्छा के बीच संभावित दौड़ की स्थिति से अवगत रहें। 1 9 सितंबर, 4:11 पर, एलिस्टेयर जॉर्ज लेटन। xtra. co. nzgt ने लिखा: gt कितनी स्थायी है WaitForExit ()। मेरा मतलब है कि जीटी वैकल्पिक कोई भी इंतजार को तोड़ने के लिए कर सकता है अन्यथा मैं एक अलग फ़ंक्शन में अपना धागा जीटी चलाऊंगा, और उसे वैश्विक चर से नियंत्रित कर सकूंगा। Gt कारण - एक सीएमडी.एक्सई थ्रेड, जिसमें कंसोल है आवेदन चल रहा है, जिसे हम जीआर को अपने कोर के चलते धागे से पहले रद्द करने की जरूरत है ई। gt यहां है जो हमारे पास है: gt प्रोसेस्टस्टाइनफ़ोई पीई नई जीपी प्रोसेस्टस्टाईटफ़ाईन (उद्धरण सीएमडी.एक्सएक्वाट, क्वेरी) gt psi. UseShellExecute का उपयोग करेंशेलएक्सएसीटी पीटी psi. RedirectStandardOutput stdout gt psi. CreateNoWindow noWindow gt hbProc नई प्रक्रिया () gt hbProc प्रक्रिया। स्टार्ट (पीई) gt hbProc. WaitForExit () gt gt, धन्यवाद, gt एलिस्टेयर। आप या तो धागा चल रहे WaitForExit () को मार सकते हैं या ओवरलोड का उपयोग कर सकते हैं जो आपको टाइमआउट बूल प्रतीक्षाफोरएक्सिट (इंट एमएसटॉवाइट) को निर्दिष्ट करने की अनुमति देता है। यदि आप इसे एक अलग थ्रेड में चलाते हैं और इसे मारते हैं तो आप एक बाधित अपवाद प्राप्त करने जा रहे हैं। आप यह सुनिश्चित करना चाह सकते हैं कि आपके द्वारा शुरू की गई प्रक्रिया अभी भी चल रही है (यदि वह है, इसे मारना)। gt आप या तो थ्रेड चल रहे WaitForExit () को मार सकते हैं या gt अधिभार का उपयोग कर सकते हैं जो आपको टाइमआउट बूल प्रतीक्षाफोरएक्सिट (इंट जीटी एमएसटॉवाइट) को निर्दिष्ट करने की अनुमति देता है। यदि आप इसे एक अलग थ्रेड में चलाते हैं और इसे मारते हैं तो gt एक बाधित अपवाद पाने के लिए जा रहे हैं। आप यह सुनिश्चित करना चाह सकते हैं कि आपने जो जीटी प्रक्रिया शुरू की है वह अभी भी नहीं चल रही है (यदि यह है, तो इसे मारना)। gt धन्यवाद के साथ लोग धन्यवाद जो उपयोगी हैं क्या विकल्प सबसे अच्छा काम करेगा सलाह देंगे अल। कॉपीराइट प्रतिलिपि 2005-2016, टेकटल्क्स सर्वाधिकार सुरक्षित।

Comments