سؤال

أنا ألعب مع بروتوكول Firmata الذي يسمح لك بالتحكم في اردوينو من خلال بروتوكول تسلسلي. أنا أقرأ قيم الاستشعار باستخدام serialporteventlistener الاستماع للحصول على حدث data_available. لكنني لاحظت الكثير من الكمون يستغرق ثانية بالنسبة لقيم المستشعر المحدثة التي سيتم تسجيلها من قبل التطبيق الخاص بي، يتم تشغيل البروتوكول بمعدل باود من 57600. سؤالي هل يعمل مستمع الحدث على مؤشر ترابط منفصل أو يفعل كل من التطبيق الخاص بي و تشغيل المستمع في نفس الخيط وتطبيقي بطيئة الأشياء لأسفل.

تحرير: لجعل نفسي واضحة، أنا فقط أسأل من الناحية النظرية ستكون أسرع لقراءة ناقل الحركة التسلسلي في مؤشر ترابط منفصل أو باستخدام مستمع الحدث؟

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

المحلول

آسف على كل هذه الإجابات، أنا أفكر بشدة حول مشكلتك.

بصرف النظر عن مشكلة تحديث واجهة المستخدم الرسومية الخاصة بك من مؤشر الترابط الخطأ، فإن مسألة المواضيع غير ذات صلة. نظرا لأن الحصول على تحديث من المنفذ التسلسلي الخاص بك ربما لا يستهلك الكثير من قوة وحدة المعالجة المركزية (لا ينبغي، على أي حال، ما لم يتم ذلك باستخدام حلقة اقتراع ضيقة) لن يكون هناك أي خلاف ملحوظ لموارد وحدة المعالجة المركزية بين المواضيع الخاصة بك، و لذلك يجب ألا تكون هناك احتمال أن تكون مؤشرات الترابط "إبطاء بعضها البعض". كنت خصم إلى حد كبير هذا الاحتمال. ولكن يمكنك البحث في TaskManager (Windows) أو مراقب النظام (Linux) لمعرفة ما إذا كانت وحدات المعالجة المركزية الخاصة بك يتم الاحتفاظ بها مشغولة حقا؛ التي قد تغير الأشياء.

نصائح أخرى

دون رؤية التطبيق الخاص بك يجب أن أخمن؛ ولكن هل من الممكن أنك تحاول عرض هذه الأحداث في واجهة المستخدم الرسومية، وتحديث واجهة المستخدم الرسومية من مؤشر ترابط آخر غير مؤشر ترابط الإرسال؟

كيف هو الكمون عندما تفعل ببساطة System.out.println() ?

تخمين آخر: عندما تحصل على DATA_AVAILABLE الحدث، هل تحصل أيضا على بعض المعلومات حول مقدار البيانات المتاحة؟

يمكن أن تحاول قراءة المزيد من البيانات أكثر مما هو عليه في المخزن المؤقت، ولا تحصل على رؤية ما حصلت عليه حتى تصبح عملية قراءة الخاص بك. هذا سيشير إلى تعيين المهلة إلى ثانية واحدة.

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