2011-08-09 13 views
8

लंबी अवधि के संचालन के दौरान हमारे सी ++ विन 32 एप्लिकेशन प्रक्रिया बार के साथ एक मोडल स्टेटस संवाद दिखाता है, जिसे प्रत्येक कुछ सेकंड या तो अनियमित अद्यतन किया जाता है। विंडोज 7 के साथ शुरू करने से हमें एहसास हुआ कि विंडोज़ जल्द ही एक संदेश दिखाता है "लटका हुआ लगता है ..." और/या हमारी विंडो शीर्षक पट्टी में "प्रतिक्रिया नहीं दे रहा" जोड़ता है।व्यस्त अनुप्रयोग विंडोज 7 पर झूठी "प्रतिक्रिया नहीं दे रहा" राज्य की ओर जाता है - WM_UPDATE

हमने पाया कि प्रक्रिया संवाद से बचने के लिए संदेशों को संभालना चाहिए। अधिक विशेष रूप से ऐसा लगता है कि विंडोज 7 लगातार यह देखने के लिए WM_UPDATE संदेशों को भेज रहा है कि हमारा प्रोग्राम जिंदा है या नहीं। हमने पहले इस संवाद में सभी अनियंत्रित संदेश हैंडलिंग को अक्षम कर दिया था क्योंकि प्रोफ़ाइल रन दिखाता है कि वे एक धीमी गति से धीमे थे।

लेकिन यद्यपि हमने यह समस्या तय की है कि उपयोगकर्ता इस तरह की समस्याओं को दोबारा रिपोर्ट कर रहे हैं: विंडोज दिखाता है "लटका हुआ लगता है ..." और/या हमारी खिड़की शीर्षक पट्टी में "प्रतिक्रिया नहीं दे रहा", हालांकि हम सभी घटनाओं को हर किसी को संभालते हैं कुछ क्षण।

सवाल:

  • वहाँ विंडोज 7 (या Windows Vista) में व्यवहार के इस परिवर्तन के बारे प्रलेखन है? हमें कोई नहीं मिला है। हमें मैसेजिंग व्यवहार के कई अन्य बदलाव भी मिले।

  • क्या संभवतः विंडोज़ से ऐसे सभी "जीवित" चेक अक्षम करने का कोई तरीका है? हमारा आवेदन बहुत अच्छी तरह से जीवित है और प्रक्रियाओं में काफी समय लग सकता है।

संपादित करें: अधिक विशिष्ट होना करने के लिए - क्या हम केवल बुला रहा है संदेश पंप PeekMessage/TranslateMessage/DispatchMessage प्रत्येक कुछ सेकंड है।

चूंकि यह एक पुराना विरासत कार्यक्रम है, निकट भविष्य में एक अलग कार्यकर्ता थ्रेड का उपयोग करना संभव नहीं है। हम निश्चित रूप से नए कोड के लिए ऐसा करते हैं। कृपया ध्यान दें कि मेरा मुख्य बिंदु यह है कि यह व्यवहार निश्चित रूप से विंडोज विस्टा/विंडोज 7 के साथ बदल गया है। मुझे वहां कोई दस्तावेज नहीं मिला है।

+1

यह पृष्ठभूमि कार्यकर्ता धागे के लिए चिल्लाता है। – Deanna

+2

"सभी ** अनइडेड ** संदेश हैंडलिंग अक्षम" - एमएसडीएन इस विषय पर काफी स्पष्ट है: "यदि [एक विंडो प्रक्रिया] किसी संदेश को संसाधित नहीं करती है, तो ** ** ** डिफ़ॉल्ट प्रक्रिया के लिए सिस्टम को संदेश भेजना होगा विंडो प्रक्रिया 'DefWindowProc' फ़ंक्शन' को कॉल करके करती है। " – MSalters

+0

कृपया मेरे उत्तर के लिए –

उत्तर

18

अच्छा, आपके प्रश्न का सीधा जवाब यह है कि आप DisableProcessWindowsGhosting() पर कॉल कर सकते हैं।

हालांकि, लक्षणों को दबाने के बजाय समस्या की जड़ को संबोधित करना बेहतर होगा। आपकी खिड़की भूत हो रही है क्योंकि आप संदेश कतार पंप नहीं कर रहे हैं। आप प्रशंसनीय कारण के लिए ऐसा नहीं कर रहे हैं कि आपका आवेदन काम करने में व्यस्त है। काम करने के लिए स्वीकार्य तरीका और अपनी कतार पंप रखें, काम को एक अलग थ्रेड में करना है।

+0

धन्यवाद संपादित करें। दस्तावेज़ीकरण कहता है "विंडो भूत एक विंडोज प्रबंधक सुविधा है जो उपयोगकर्ता को उस एप्लिकेशन की मुख्य विंडो को कम करने, स्थानांतरित करने या बंद करने देती है जो प्रतिक्रिया नहीं दे रहा है।" यह "लटका नोट लगता है" को अक्षम करने के बारे में कुछ भी नहीं कहता है। क्या आप इसके बारे में कुछ और जानते हैं? –

+2

जब आप भूत को अक्षम करते हैं तो आपको कैप्शन इत्यादि से जुड़े किसी भी "(प्रतिक्रिया नहीं)" पाठ को नहीं देखा जाएगा। –

+0

एक अलग थ्रेड का उपयोग करके, एक यूएक्स परिप्रेक्ष्य से, आप अपने उपयोगकर्ता को प्रतिक्रिया देने के लिए वर्तमान का उपयोग कर सकते हैं उनके कार्य की प्रगति। – Ben

संबंधित मुद्दे