كيف يمكنني معرفة عندما PyQt-التطبيق هو الخمول ؟

StackOverflow https://stackoverflow.com/questions/847924

  •  21-08-2019
  •  | 
  •  

سؤال

أود أن أعرف عندما بلدي التطبيق خاملا بحيث لا يمكن التحميل المسبق بعض المحتوى.هل هناك حدث أو شيء من هذا القبيل تنفذ في PyQt?

(أنا يمكن أن تفعل ذلك أيضا مع المواضيع ، لكن يبدو أن تكون معقدة جدا.)

هل كانت مفيدة؟

المحلول

لديك اثنين على الأقل من الخيارات المختلفة، يمكنك استخدام موضوع أو استخدام جهاز توقيت. توفر الطبقة QThread كيو تي في خاصية الأولوية التي يمكنك تعيينها لجعلها العملية فقط عندما يتم تشغيل أي مواضيع أخرى، والذي يتضمن موضوع واجهة المستخدم الرسومية. الخيار الآخر هو توقيت طلقة واحدة. A QTimer مع مهلة 0 ميلي ثانية يضع الحدث في الجزء الخلفي من قائمة انتظار الحدث بحيث يتم معالجة كافة الأحداث والمهام في وقت والنشطة بالفعل أو المقرر أولا.

في التعليمات البرمجية، فإن الخيارين تبدو التالية:

// (1) use idle thread processing
MyQThreadSubclass idleThread;
idleThread.run(QThread::IdlePriority);

// (2) use QTimer::singleShot
QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));

إذا كنت أذهب مع طلقة واحدة QTimer، وتوخي الحذر كم تجهيز تفعل كما لا يزال بإمكانك منع غوي. كنت على الأرجح تريد كسرها إلى قطع بحيث لن تبدأ GUI أن يتخلف:

// slot
void doIdleProcessingChunk() {
    /* ... main processing here ... */
    if (chunksRemain())
        QTimer::singleShot(0, receiver, SLOT(doIdleProcessingChunk));
}

ومن الواضح أن ما سبق هو C ++ في بناء الجملة، ولكن للإجابة فيما يتعلق باي كيوت، استخدام جهاز ضبط الوقت رصاصة واحدة. في بيثون، و العالمية قفل مترجم هو في الأساس سوف تجعل الكثير من التزامن الخاص بك لا طائل منه إذا كان التنفيذ يطلق عليها يتم تنفيذها في بيثون.

ويمكنك أيضا ثم لديك خيار استخدام المواضيع بيثون أو المواضيع كيو تي، وكلاهما جيد لأسباب مختلفة.

نصائح أخرى

إلقاء نظرة على QAbstractEventDispatcher. ولكن ...لا تزال تشير إلى أن استخدام الخيط.الأسباب:

  1. سيكون المحمولة
  2. إذا كنت تجعل من خطأ في التعليمات البرمجية الحدث حلقة سوف تكون مكسورة -> لك التطبيق قد يتعطل الخروج فجأة ، إلخ.
  3. في حين تحميلها مسبقا يحدث التطبيق الخاص بك توقف.لا الأحداث سيتم معالجتها ما لم تتمكن من التحميل المسبق المحتوى في وقت واحد ، فهي كل صغيرة جدا, التحميل يستغرق سوى بضع ميلي ثانية ، إلخ.

استخدام الخيط وإرسال إشارة إلى الخيط الرئيسي عندما يكون محتوى جاهز.انها أكثر من ذلك بكثير بسيطة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top