2012-12-29 17 views
22

मान लें कि मेरे पास स्लॉट अधिसूचना से जुड़ा सिग्नल परिवर्तन है। यदि परिवर्तन सिग्नल उत्सर्जित है, स्लॉट को सूचित करना प्रारंभ कर देगा।क्यूटी सिग्नल और स्लॉट थ्रेड सुरक्षा

अब क्या होता है यदि दूसरा परिवर्तन सिग्नल उत्सर्जित होता है और पहला अधिसूचना स्लॉट अपना निष्पादन समाप्त नहीं करता है?

दूसरा स्लॉट पहले के साथ समवर्ती रूप से लॉन्च किया गया है? और यदि हां, तो क्या क्यूटी थ्रेड-सुरक्षा को संभालने वाला है या यह प्रोग्रामर तक इसे संभालने के लिए है?

उत्तर

29

यह connect फ़ंक्शन को कॉल करके निर्दिष्ट कनेक्शन प्रकार पर निर्भर करता है। एकमात्र तरीका जब स्लॉट लॉन्च किया जाएगा तो यह है कि यदि आपने Qt::DirectConnection निर्दिष्ट किया है और स्लॉट के धागे से अलग धागे में सिग्नल उत्सर्जित किया है। यदि आप कनेक्शन प्रकार को छोड़ देते हैं, तो यह Qt::AutoConnection होगा। इस मामले में यदि आप एक थ्रेड से सिग्नल उत्सर्जित करते हैं, और इसे दूसरे में पकड़ते हैं (उदा। मुख्य जीयूआई थ्रेड में) - क्यूटी संदेश कतार में स्लॉट कॉल डाल देगा और सभी कॉल क्रमशः कर देगा। अधिक जानकारी के लिए इसे पढ़ें - http://qt-project.org/doc/qt-4.8/threads-qobject.html#signals-and-slots-across-threads

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