Saturday 2 December 2017

सी # thread waitforexit


सी 3.5 विनफ़ॉर्म ऐप मेरे पास एक टाइमर है जो प्रत्येक 30 सेकेंड अलग थ्रेड पर आग लगाता है (यह सब करता है वीएस आउटपुट विंडो में पाठ की एक स्ट्रिंग लिखता है) मेरे पास एक और धागा भी है जो एक निश्चित प्रक्रिया को समाप्त करने के लिए प्रतीक्षा करता है, अगर यह शुरू होता है। उदाहरण के लिए winword. exe उस धागे में मुझे यह कोड है: और यह वहां बैठेगा और बाहर निकलने के लिए winword. exe का इंतजार करेगा। यह ठीक काम करता है हालांकि, जब वह वहां बैठे हैं, तो बाहर निकलने के लिए winword. exe का इंतजार कर रहा है, तो 30 सेकंड टाइमर पूरी तरह से अलग धागा (जो आउटपुट विंडो में टेक्स्ट भेजता है) कभी नहीं चलता। अगर मैं 3 मिनट का इंतजार करता हूं (इस समय अन्य टाइमर को 6 बार चलाया जाना चाहिए, लेकिन यह प्रतीक्षा नहीं करता है, जबकि WaitForExit () प्रतीक्षा कर रहा है), और फिर मैं winword. exe से बाहर निकलता हूं, मेरे दूसरे टाइमर अचानक एक बार 6 बार चलने लगता है । ऐसा लगता है कि टाइमर की घटना का एक बैकलॉग है और अचानक सभी इसे एक ही समय में चलाना चाहता है। क्यों p. WaitForExit () मेरे पूरे आवेदन को अवरुद्ध करने लगते हैं भले ही मेरे पास मेरे ऐप (मुख्य UI थ्रेड) से अलग थ्रेड से निष्पादित नहीं है, संपादित करें: हाँ यह अलग थ्रेड में है यहां कोड है जिसे मैं इसे लॉन्च करने के लिए प्रयोग करता हूं: यहां पर प्रोसेसचेक () विधि है जो मेरे पास है: आपके पास सही विचार है पीटर, गलत स्पष्टीकरण कॉलिंग कंट्रोल। इन्वोक UI थ्रेड पर निर्दिष्ट प्रतिनिधि को चलाता है और कॉलिंग थ्रेड को अवरुद्ध करता है जब तक कि यूआई थ्रेड ने इसका निष्पादन पूरा नहीं किया हो। ऊपर दिए गए कोड में क्या हो रहा है यह है कि p. WaitForExit दोनों UI थ्रेड को अवरुद्ध कर रहा है (क्योंकि यह UI थ्रेड पर निष्पादित है), और कॉलिंग थ्रेड (जो UI थ्रेड पर प्रतीक्षा कर रहा है)। ndash Tergiver Jul 30 12 at 17:49 fraXis आप BeginInvoke का उपयोग कर सकते हैं, लेकिन वह अभी भी UI थ्रेड पर WaitForExit को कॉल करेगा और इसे ब्लॉक करेगा। यदि कोड जो वर्तमान में कॉल करता है, पृष्ठभूमि कॉलम में है, तो आप WaitForExit को सीधे कॉल कर सकते हैं जो UI थ्रेड के बजाय पृष्ठभूमि धागे को ब्लॉक करने का कारण होगा। अगर आप वास्तव में क्या करने की कोशिश कर रहे हैं, तो आप कुछ और जानकारी प्रदान करते हैं, तो कोई और अधिक विवरण प्रदान कर सकता है। ndash पीटर रिची जुलाई 30 12 पर 17: 52 कैसे स्थायी है WaitForExit ()। इसका मतलब यह है कि विकल्प का कोई भी विकल्प प्रतीक्षा को तोड़ने के लिए कर सकता है अन्यथा मैं अपने धागे को एक अलग समारोह में चलाऊंगा और इसे वैश्विक चर से नियंत्रित कर दूंगा। कारण - एक सीएमडी.एक्सई धागा, एक कंसोल अनुप्रयोग चल रहा है, जिसके चलते हम थ्रेड के पाठ्यक्रम से पहले ही रद्द करना चाहते हैं। यहां हमारे पास क्या है: प्रोसेस्टस्टाईटफ़ोई पीएसआई नई प्रोसेस्टस्टाइनफ़ो (quotCMD. EXEquot, क्वेरी) psi. UseShellExecute का उपयोग करें शेलएक्सेक psi. RedirectStandardOutput stdout psi. CreateNoWindow noWindow hbProc नई प्रक्रिया () एचबीप्रक्र प्रोसेस। स्टार्ट (पीएसआई) एचबीप्रक्र। वेटफॉरएक्स () ठीक है, आप कर सकते हैं उपयोग: जबकि (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-2018, टेकटल्क्स सर्वाधिकार सुरक्षित।

No comments:

Post a Comment