2012-07-17 13 views
8

मुझे एक समस्या का सामना करना पड़ रहा है जहां मुझे अपने यूआई (और पूर्ण ओएस) को बहु-थ्रेडेड एप्लिकेशन में उत्तरदायी रखने की आवश्यकता है।सीपीयू लोड 100% (मुख्य रूप से सी ++ और क्यूटी का उपयोग करके) यूआई उत्तरदायी कैसे रखें?

मैं एक एप्लिकेशन (सी ++ और क्यूटी आधारित) विकसित कर रहा हूं जो एक ही समय में कई स्ट्रीम से वीडियो फ्रेम को प्राप्त और परिवर्तित करता है।

प्रत्येक स्ट्रीम को अपने स्वयं के अलग कार्यकर्ता थ्रेड (डायरेक्टएक्स का उपयोग करके) में पुनर्प्राप्त, परिवर्तित और प्रस्तुत किया जाता है। इसका मतलब है कि मैं फ्रेम प्रस्तुत करने के लिए डिफ़ॉल्ट जीयूआई थ्रेड का उपयोग नहीं कर रहा हूं।

एक शक्तिशाली कंप्यूटर पर मुझे कोई समस्या नहीं है क्योंकि सीपीयू सभी डेटा को संसाधित कर सकता है और उपयोगकर्ता अनुरोध को संसाधित करने के लिए जीयूआई थ्रेड के लिए समय रख सकता है। लेकिन पुराने कंप्यूटर पर, यह काम नहीं करता है, सीपीयू का उपयोग मेरे डेटा को संसाधित करने के लिए 100% पर किया जाता है, और यूआई लगी हुई है, बटन क्लिक संसाधित होने में 10 सेकंड लग सकते हैं।

मैं अपना यूआई उत्तरदायी रखना चाहता हूं। असल में, मैं चाहता हूं कि मेरा कार्यकर्ता थ्रेड केवल तभी काम करता है जब कोई अन्य कार्य करने की कोई कार्रवाई न हो। मैंने कार्यकर्ता थ्रेड प्राथमिकता को कम करने की कोशिश की, लेकिन यह काम नहीं करता है। मैंने कार्यकर्ता धागे में नींद (10) की भी कोशिश की, लेकिन क्योंकि मेरे पास बहुत सारे धागे हो सकते हैं, वे एक ही समय में सोने में नहीं आते हैं, इसलिए यह काम नहीं कर रहा है।

उस मामले में UI को उत्तरदायी रखने का सबसे अच्छा तरीका क्या है (जो टूलकिट उपयोग करता है)?

+1

ऐसा लगता है जैसे आप बहुत सारे धागे बना रहे हैं। –

+7

आपको यूआई अनुरोध –

+1

को संभालने वाले थ्रेड (ओं) की तुलना में कार्यकर्ता धागे को कम प्राथमिकता देना चाहिए "मैंने कार्यकर्ता थ्रेड प्राथमिकता को कम करने की कोशिश की, लेकिन यह काम नहीं करता है।" - स्पष्ट रूप से यह सुझाव है कि आपका प्रश्न पूछेगा (और Ivor प्रदान किया गया है), तो अपने कोड और वर्णन दिखाएं कि क्या गलत है। अलग-अलग, रीयल टाइम वीडियो के लिए समय को मापने के लिए कोड की कुछ पंक्तियां जोड़ना सामान्य होता है और यदि आप पर्याप्त तेज़ी से फ्रेम प्रस्तुत नहीं कर रहे हैं, तो कम समेकित रूप से प्रतिपादन करना शुरू करें - कुछ फ्रेम छोड़ना; वैकल्पिक रूप से संकल्प या प्रतिपादन गुणवत्ता को कम करने के लिए कुछ करें। –

उत्तर

4

ऊपर दी गई सूची पर मेरी टिप्पणी नहीं जोड़ सकते हैं इसलिए मैं यहाँ मेरी कुछ सेंट जोड़ने के लिए है:

  • यदि आप ओएस और अधिक उत्तरदायी तो सुनिश्चित करें कि आप बहुत ज्यादा रैम का उपभोग नहीं करते और इस प्रक्रिया को शुरू करना चाहते हैं कम प्राथमिकता में - afaik धागा प्राथमिकताओं को केवल तभी ध्यान में रखा जाता है जब ओएस को यह तय करना होता है कि प्रक्रिया से कौन सा धागा चलाना चाहिए, लेकिन पूरी प्रक्रिया अभी भी 100% सीपीयू पर काम करती है जब सिस्टम से अन्य प्रक्रियाओं को ध्यान में रखा जाता है
  • सुनिश्चित करें कि नहीं बहुत सारे धागे चलाएं, अच्छा समाधान 100% सीपीयू का उपयोग करने वाले कई धागे बनाने के लिए है, यदि आप अधिक चाहते हैं तो मल्टीटास्किंग तकनीकों का उपयोग करें

जांच करने के लिए एक बात - आप वीडियो प्रदर्शन कैसे करते हैं? क्या आप सुनिश्चित करते हैं कि आपकी प्रदर्शन दर (धाराओं से डेटा) कार्ड की रीफ्रेश दर प्रदर्शित करती है? जब आपके पास प्रदर्शित करने के लिए डेटा होता है तो क्या आप स्क्रीन को अपडेट करने के लिए आवश्यक थ्रेड को सूचित करते हैं (बेहतर समाधान) या आप प्रत्येक थ्रेड (खराब समाधान) से फ्रेम डिस्प्ले को मजबूर करते हैं?

+0

ओएस लॉकिंग का अधिकांश हिस्सा एक ही समय में प्रदर्शित होने वाले बहुत अधिक डेटा या बहुत अधिक डेटा को पढ़ने/लिखने के कारण –

+1

ठीक है, धन्यवाद, मुझे बेवकूफ लगता है, लेकिन मुझे समस्या मिली! असल में, यह मेरे आवेदन में बस एक बग था। मैंने अपने थ्रेड प्राथमिकताओं को ट्रैक करने के लिए प्रक्रिया एक्सप्लोरर का उपयोग किया, और मैंने पाया कि यह सही ढंग से सेट नहीं किया गया था! लेकिन प्राथमिकता सेट समाधान था! – SaiyanRiku

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