लंबी अवधि के संचालन के दौरान हमारे सी ++ विन 32 एप्लिकेशन प्रक्रिया बार के साथ एक मोडल स्टेटस संवाद दिखाता है, जिसे प्रत्येक कुछ सेकंड या तो अनियमित अद्यतन किया जाता है। विंडोज 7 के साथ शुरू करने से हमें एहसास हुआ कि विंडोज़ जल्द ही एक संदेश दिखाता है "लटका हुआ लगता है ..." और/या हमारी विंडो शीर्षक पट्टी में "प्रतिक्रिया नहीं दे रहा" जोड़ता है।व्यस्त अनुप्रयोग विंडोज 7 पर झूठी "प्रतिक्रिया नहीं दे रहा" राज्य की ओर जाता है - WM_UPDATE
हमने पाया कि प्रक्रिया संवाद से बचने के लिए संदेशों को संभालना चाहिए। अधिक विशेष रूप से ऐसा लगता है कि विंडोज 7 लगातार यह देखने के लिए WM_UPDATE संदेशों को भेज रहा है कि हमारा प्रोग्राम जिंदा है या नहीं। हमने पहले इस संवाद में सभी अनियंत्रित संदेश हैंडलिंग को अक्षम कर दिया था क्योंकि प्रोफ़ाइल रन दिखाता है कि वे एक धीमी गति से धीमे थे।
लेकिन यद्यपि हमने यह समस्या तय की है कि उपयोगकर्ता इस तरह की समस्याओं को दोबारा रिपोर्ट कर रहे हैं: विंडोज दिखाता है "लटका हुआ लगता है ..." और/या हमारी खिड़की शीर्षक पट्टी में "प्रतिक्रिया नहीं दे रहा", हालांकि हम सभी घटनाओं को हर किसी को संभालते हैं कुछ क्षण।
सवाल:
वहाँ विंडोज 7 (या Windows Vista) में व्यवहार के इस परिवर्तन के बारे प्रलेखन है? हमें कोई नहीं मिला है। हमें मैसेजिंग व्यवहार के कई अन्य बदलाव भी मिले।
क्या संभवतः विंडोज़ से ऐसे सभी "जीवित" चेक अक्षम करने का कोई तरीका है? हमारा आवेदन बहुत अच्छी तरह से जीवित है और प्रक्रियाओं में काफी समय लग सकता है।
संपादित करें: अधिक विशिष्ट होना करने के लिए - क्या हम केवल बुला रहा है संदेश पंप PeekMessage
/TranslateMessage
/DispatchMessage
प्रत्येक कुछ सेकंड है।
चूंकि यह एक पुराना विरासत कार्यक्रम है, निकट भविष्य में एक अलग कार्यकर्ता थ्रेड का उपयोग करना संभव नहीं है। हम निश्चित रूप से नए कोड के लिए ऐसा करते हैं। कृपया ध्यान दें कि मेरा मुख्य बिंदु यह है कि यह व्यवहार निश्चित रूप से विंडोज विस्टा/विंडोज 7 के साथ बदल गया है। मुझे वहां कोई दस्तावेज नहीं मिला है।
यह पृष्ठभूमि कार्यकर्ता धागे के लिए चिल्लाता है। – Deanna
"सभी ** अनइडेड ** संदेश हैंडलिंग अक्षम" - एमएसडीएन इस विषय पर काफी स्पष्ट है: "यदि [एक विंडो प्रक्रिया] किसी संदेश को संसाधित नहीं करती है, तो ** ** ** डिफ़ॉल्ट प्रक्रिया के लिए सिस्टम को संदेश भेजना होगा विंडो प्रक्रिया 'DefWindowProc' फ़ंक्शन' को कॉल करके करती है। " – MSalters
कृपया मेरे उत्तर के लिए –