अगर मेरे पास कक्षा ए था, जहां उसके कार्यों में से एक है:क्यूटी: घटनाओं को क्रम में संसाधित किया जाता है?
void A::func()
{
emit first_signal();
emit second_signal();
}
मान लें कि कक्षा बी में 2 स्लॉट हैं, एक first_signal
से जुड़ा है, और दूसरा second_signal
है, क्या यह गारंटीकृत है कि स्लॉट first_signal
से जुड़ा हुआ xxx22second_signal
स्लॉट से पहले first_signal
से हमेशा संसाधित किया जाएगा?
मुझे लगता है कि जब तक यह डिफ़ॉल्ट नहीं है, तब तक इसकी गारंटी दी जाएगी, भले ही यह डिफ़ॉल्ट न हो। कतारबद्ध एक दो प्राथमिक घटनाओं के साथ दो घटनाओं का निर्माण करेगा, और फिर उन घटनाओं को क्रमशः संसाधित किया जाएगा। साथ ही, डिफ़ॉल्ट कनेक्शन प्रकार Qt :: AutoConnection है, जो तब तक निर्देशित करता है जब तक कि दोनों एमिटर और रिसीवर एक ही थ्रेड में न हों। –
आपकी पोस्ट की आरंभिक वाक्य को पढ़ना चाहिए 'यदि आप सिग्नल और स्लॉट के बीच प्रत्यक्ष कनेक्शन प्रकार का उपयोग करते हैं'; चूंकि डिफ़ॉल्ट प्रकार 'Qt :: AutoConnection' है जो भेजने के कोड या प्राप्त करने वाली ऑब्जेक्ट अलग-अलग धागे में रहते हैं या नहीं, इस पर निर्भर करता है। ['क्यूटी :: कनेक्शन टाइप प्रकार 'दस्तावेज़ देखें (http://qt-project.org/doc/qt-4.8/qt.html#ConnectionType-enum) और [थ्रेड, ईवेंट और QObjects] (http: // qt- project.org/wiki/Threads_Events_QObjects)। – Hossein
यदि आपने Qt :: QueuedConnection (या Qt :: AutoConnection और स्लॉट सिग्नल के लिए एक अलग थ्रेड में था) चुना है, तो निश्चित रूप से स्लॉट को असीमित रूप से कहा जाएगा, लेकिन मुझे लगता है कि सवाल अभी भी खड़ा है "क्या यह गारंटी है कि स्लॉट जो first_signal से जुड़ा हुआ है हमेशा दूसरे_सिग्नल स्लॉट से पहले संसाधित किया जाएगा? " किसी को जवाब मिला है? –