2012-09-27 7 views
7

मुझे हर 1 एमएस ट्रिगर करने के लिए टाइमर चाहिए। This दस्तावेज़ रिपोर्ट, कि स्लॉट आमंत्रण वर्चुअल फ़ंक्शन कॉल से भी धीमा हो सकता है।Qtimer बनाम timerEvent - उनमें से कौन सा कम ओवरहेड पैदा करता है?

लेकिन अगर हम घटना घटना के साथ संकेत/स्लॉट की तुलना में, क्या तंत्र तेजी से, अधिक कुशल हो सकता है और कम भूमि के ऊपर का उत्पादन करेगा: QTimer इसके साथ एक स्लॉट या नंगे QObject::startTimer() \ QObject::timerEvent() साथ QObject::killTimer() से जुड़ा timeout() संकेत है?

क्या उपरोक्त प्रश्न का उत्तर विंडोज और लिनक्स के लिए समान होगा?

उत्तर

8

QTimer वास्तव में QObject::startTimer() कार्यक्षमता चारों ओर सिर्फ एक संकेत-स्लॉट आवरण है, इसलिए यह निस्संदेह अधिक भूमि के ऊपर (वह आंतरिक रूप से लागू करता है QObject::timerEvent() सभी प्लेटफार्मों पर इसके साथ जुड़े होगा - इस समारोह के इसके कार्यान्वयन सिर्फ timeout() संकेत फेंकना है)।

नोट, QBasicTimerQObject::startTimer() कार्यक्षमता के आस-पास एक हल्का वजन वाला रैपर है। यदि आप QBasicTimer का उपयोग करते हैं, तो आपको अभी भी QObject::timerEvent() लागू करना होगा, लेकिन यह आपके लिए टाइमर आईडी प्रबंधित करता है। इस प्रकार, QBasicTimerQObject::startTimer() तंत्र का उपयोग करने की दक्षता के साथ QTimer के उपयोग में आसानी से उपयोग को जोड़ता है।

+0

लिनक्स QBasicTimer पर QGLWidget को अद्यतन करने के लिए 0 टाइमआउट के साथ ~ मशीन के क्यूटीमर से ~ 0.2msecs तेज है - धन्यवाद: डी – paulm

5

वास्तव में, यदि आपको परिशुद्धता की आवश्यकता है, तो क्यूटी इस बात की गारंटी नहीं देता है कि आपका टाइमर ठीक से 1ms के बाद निष्पादित हो जाता है।

क्यूटी 4.7.एक्स तक कम से कम क्यूटी के पास एक ईवेंट (इवेंट लूप के अंदर संसाधित) होने पर सभी टाइमर को ईवेंट लूप में आंतरिक रूप से समाप्ति के लिए चेक किया जाता है (और फिर उनके सिग्नल उठाए जाते हैं) "। मेरा मतलब है, उन्हें ओएस इवेंट के रूप में निष्पादित नहीं किया जाएगा जो अन्य कार्यों में बाधा डालता है, आदि

आपको जो भी मिल सकता है वह 1.5 सेकंड के बाद निष्पादित टाइमर होता है यदि आपके लूप में किसी भी अन्य 3 घटनाओं को उदाहरण के लिए 0.5 सेकंड की आवश्यकता होती है।

मुझे उम्मीद है कि मेरी याददाश्त विफल नहीं हो रही है, मैंने कुछ महीने पहले क्यूटी टाइमर कोड पर एक नज़र डाली और अब मुझे याद नहीं है कि टाइमर घटनाओं को अन्य घटनाओं या उससे पहले संसाधित किया जाता है या नहीं।

आशा है कि इससे आपको थोड़ा और मदद मिलेगी।

+0

मुझे इसके बारे में मेरा अगला प्रश्न पूछना चाहिए। धन्यवाद! – Sergey

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