علاء الصالحي كتب:أخ مهدي حجازي
دعني أخبرك بالطريقة التي تعمل بها حزمة المحرك حتى تتضح الصورة أكثر
الحزمة تقوم بشكل أساسي على خيط وحيد
إذا أردت أن تحرك كائن واحد تقوم بإضافته إلى الحزمة
فيقوم المجدول بجدولته في قائمة الكائنات المتحركة (علماً بأن الحزمة تعتمد على مجدول واحد للجميع)
كل كائن له مجموعة الحركات التي سيتحركتها محددة بالوقت الذي سيتم أداء الحركة فيها
المحرك يقضي الفترات التي لا يوجد فيها حركات للكائنات المتحركة في سبات
ويضبط وقت الصحيان من السبات على الوقت الذي سيتحرك فيه أول كائن متحرك
في حال كون الكائنات المتحركة ليس لديها حركات فيبقى المحرك في حالة سبات حتى الوقت الذي تضاف فيه حركات جديدة
فيقوم بجدولتها وتنبيه المحرك للعمل
لاحظ أن المحرك يعرف فعلياً متى عليه تنفيذ الحركة
بدون أن يمر على كل كائن ويسأله متى ستتحرك يا أستاذ
فهناك مدير يعرف بالضبط من سيتحرك ومتى سيتحرك وإلى أين ستحرك بدون أي تخاطب مع المطور (أقصد عملية الرسم paint)
كما أن هذه الطريقة تمكنك من بناء حركة ديناميكية تعتمد على الأحداث الحاصلة من المستخدم أو الحاصلة من كائنات متحركة أخرى بدون أن يكون لديك أدنى فكرة عن الموضوع
بالنسبة للنظام الموجود في الحزمة LWUIT
فهو لا يعرف وإنما يظل يسأل هل ستتحرك يا أستاذ هل ستتحرك يا أستاذ بالطبع لو كان عدد الأساتذة كثر والقرار الذي يأخذه كل أستاذ ليقول لك سأتحرك أو لا يأخذ وقتاً جيداً
ستجد أن هناك إجمالي وقت مهدر بدون فائدة فعلية
على كل أنا اعتمدت على هيكلية إرسال التحديثات من قبل العملاء (لو هناك كائن متحرك يريد أن يتحرك بعد 100 ثانية سيرسل لي يقول أريد أن أتحرك)
بينما الحزمة اعتمدت على هيكلية اطلب التحديثات من العملاء (لو هناك كائن متحرك يريد أن يتحرك بعد 100 ثانية سينتظر حتى تمر المئة ثانية ثم يجيب علي عندما أسأله إن كان يريد أن يتحرك بالإيجاب)
والأخيرة مشهورة بأنها تضيع الوقت في طلب
هنا تكمن النقطة أريد أن أفهم لماذا استخدم هذه الهيكلية ولم يستخدم الأولى
هل اتخذ قراره بناءاً على بعض المعوقات في بيئة المحمول؟ (إنسان انلدع من المعوقات في بيئة المحمول
)
أم أن قراره بني على السهولة؟ بمعنى أنه وجد أن هذه الآلية تسهل عليه بناء الحزمة فاستخدمها وأراح نفسه
الرد طول وخايف يضيع
لذا أرسله وسأكمل في رد آخر بالنسبة للسؤال الآخر
تحياتي
حسنا يبدو أن الأمر غير واضح لك بالنسبه ل LWUIT. LWUIT لا تقوم بسؤال كل المكونات بل فقط المكونات التي تريد التحرك وأنت تسجل المكون الذي تريد تحريكه عن طريق registerAnimated وبعدها سيقوم المحرك بسؤاله عن هل يريد التحرك أم لا؟ الان بالنسبه لمتى يتحرك الكائن فهذه غالبا لا نحتاجها, في غالب الاحيان الكائن الذي يريد الحركه سيتحرك مباشره أو سينتظر فتره بسيطه ثم يبدأ الحركه فالاهدار ليس كبير ثم لا زلت أنت تستخدم خيطان وهو خيط واحد..طبعا لن أخبرك عن مدى سوء ال Scheduling بين ال Threads في JME ثم هنالك مشكله أعم وأكثر ظهورا عندي في المحمول وهي أنني أريد القيام بحركات متقطعه أي أريد أن أحرك المكون لثانيتان ثم أقف لثانيتان ثم أعيد الكره وهكذا..هذه الحاله تتكرر كثيرا معي وباستخدام LWUIT الموضوع ممتاز حيث لا حاجه لي لاعده جدوله الكائن كل ما علي ان أخبر المحرك أنني الان اريد التحرك أو التوقف وعندما انتهي أخبره بازالته من قائمه الكائنات المتحركه..هل لك أن تطلعني على كيفيه معالجه هذه الحاله عندك.

