c++ - Could I thread this for loop -
के लिए (अहस्ताक्षरित int mBlock = 0; mbllock & lt; coords.size (); mBlock ++) {विजेट टाइप करें widgetType; ऊंचाई = मैकब्लॉकविड्थ + कोर्ड्स [एमब्लॉक] .y; चौड़ाई = मैकब्लॉकहैइट + कोऑर्ड [एमब्लॉक]। एक्स; MacBlockParent = नए QWidget; CooefsLink = नए QPushButton (macBlockParent); मैकब्लॉक = नया QWidget (मैकब्लॉकपरेंट); WidgetType.widget = macBlock; WidgetType.type = (मैकब्लॉक्स [एमब्लॉक] [2]! = 'एस')? (मैकब्लॉक्स [एमब्लॉक] [0]): (मैकब्लॉक्स [एमब्लॉक] [2]); blockWidgetTypes.push_back (widgetType); कनेक्ट (कॉयोएफ़ लिंक्च, सिग्नल (रिलीज़ ()), यह, स्लॉट (शोकार्यिफिकेशंस ())); बटन सिग्नल [कोयुएफ़ लिंक्ग] = एमब्लॉक; constructMotionVector (mBlock); मैकब्लॉकलेआउट- & gt; ऐडविजेट (मैकबॉलकैपपरेंट, ऊंचाई - 16, चौड़ाई - 16); styleMacroBlocks (mBlock); } क्या मैं उस लूप के लिए इस से एक फ़ंक्शन बना सकता था, जहां मैं एक ही समय में वेक्टर पर ऑपरेटिंग दोनों लूपों के लिए दो अलग-अलग हिस्सों में विभाजित करके ऑपरेशन को समानांतर कर सकता था। पहला आधा आइटम पर काम कर रहा है और दूसरा धागा दूसरी छमाही का निर्माण कर रहा है इसलिए उदाहरण के लिए
थ्रेड 1 के लिए (अहस्ताक्षरित int mbllock = 0; mbllock & lt; coords.size () / 2; एमब्लॉक ++) {WidgetType widgetType; ऊंचाई = मैकब्लॉकविड्थ + कोर्ड्स [एमब्लॉक] .y; चौड़ाई = मैकब्लॉकहैइट + कोऑर्ड [एमब्लॉक]। एक्स; MacBlockParent = नए QWidget; CooefsLink = नए QPushButton (macBlockParent); मैकब्लॉक = नया QWidget (मैकब्लॉकपरेंट); WidgetType.widget = macBlock; WidgetType.type = (मैकब्लॉक्स [एमब्लॉक] [2]! = 'एस')? (मैकब्लॉक्स [एमब्लॉक] [0]): (मैकब्लॉक्स [एमब्लॉक] [2]); blockWidgetTypes.push_back (widgetType); कनेक्ट (कॉयोएफ़ लिंक्च, सिग्नल (रिलीज़ ()), यह, स्लॉट (शोकार्यिफिकेशंस ())); बटन सिग्नल [कोयुएफ़ लिंक्ग] = एमब्लॉक; constructMotionVector (mBlock); मैकब्लॉकलेआउट- & gt; ऐडविजेट (मैकबॉलकैपपरेंट, ऊंचाई - 16, चौड़ाई - 16); styleMacroBlocks (mBlock); } थ्रेड 2 के लिए (अहस्ताक्षरित int mBlock = coords.size () / 2; mbllock & lt; coords आकार (); एमब्लॉक ++) {WidgetType widgetType; ऊंचाई = मैकब्लॉकविड्थ + कोर्ड्स [एमब्लॉक] .y; चौड़ाई = मैकब्लॉकहैइट + कोऑर्ड [एमब्लॉक]। एक्स; MacBlockParent = नए QWidget; CooefsLink = नए QPushButton (macBlockParent); मैकब्लॉक = नया QWidget (मैकब्लॉकपरेंट); WidgetType.widget = macBlock; WidgetType.type = (मैकब्लॉक्स [एमब्लॉक] [2]! = 'एस')? (मैकब्लॉक्स [एमब्लॉक] [0]): (मैकब्लॉक्स [एमब्लॉक] [2]); blockWidgetTypes.push_back (widgetType); कनेक्ट (कॉयोएफ़ लिंक्च, सिग्नल (रिलीज़ ()), यह, स्लॉट (शोकार्यिफिकेशंस ())); बटन सिग्नल [कोयुएफ़ लिंक्ग] = एमब्लॉक; constructMotionVector (mBlock); मैकब्लॉकलेआउट- & gt; ऐडविजेट (मैकबॉलकैपपरेंट, ऊंचाई - 16, चौड़ाई - 16); styleMacroBlocks (mBlock); } क्योंकि यह मेरे सिस्टम के लिए एक वास्तविक अवरोधन है और मैं केवल एक सीपीयू का उपयोग करके और सीपीयू को अधिकतम करने की सूचना देता हूं। किसी भी मदद महान धन्यवाद होगा।
एचएम ... यदि आपके पास इस तरह के निर्माण हैं: BlockWidgetTypes.push_back (widgetType); में दोनों धागे, यह मल्टीथ्रेडेड निष्पादन के लिए बहुत खतरनाक लगता है।
Comments
Post a Comment