سؤال

هل هناك طريقة لعقد موضوع في حالة تنتظر التغييرات؟ أعني الانتظار TLL شيء ما يحدث (تغيير Var، طريقة الاتصال، إلخ.) ربما تحتاج إلى استخدام مستمعي الأحداث، أو الكائنات / الأساليب المتزامنة ..

aloach المعتاد ل statemachines مثل هذا

Statemachine مثال

التي تستخدم Do {..} أثناء (TRUE) حلقة التي يمكن أن تعمل من أجل تطبيق مبيعا الخيوط (ووي) ولكنه غير مستخدم مع المواضيع .. (على الأقل تريد استخدام جوهر لكل آلة الحالة الخيوط في

إذن لتجنب هذه المهمة المستهلكة المعالج هي الطريقة البسيطة (والقبيح) هي "مدقق دوري"، أعني أن إضافة فكرة نوم أخرى تحدد كائنا متزامنا واستخدام الانتظار بدلا من النوم

مثال:

do{
    Switch(state)
    {         
        case STATE_A:
            //..A things                         
            break;

        case STATE_B:
            //..B things                         
            break;

        ...

        case STATE_Z:
            //..Z things                         
            break;
    }
    // Here!  =>   wait()?  Thread.sleep(TIME_CONST)? //Hold and yield
}while(powerOn);

يضيف العيب التعقيد باستخدام مزامنة أو أن أي شيء يحدث خلال time_const سيكون غير مرئي

أود أن أعرف أفكارا أخرى للقيام بذلك، شكرا!

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

المحلول

نعم، سوف تستخدم wait/notify. وبعد هذا هو ما هو عليه بالنسبة لل.

أو ربما لا تحتاج آلة الحالة الخاصة بك إلى خيطها الخاص. مواضيع أخرى يمكن أن تسمي update الطريقة على آلة الحالة عندما يحدث شيء مثير للاهتمام.

نصائح أخرى

إذا حددت طيب آلة الدولة في Humple ثم سيتم إنشاء رمز لهذا لكي. تحديد آلة حالة UMPLE حيث تقوم قائمة الانتظار خصيصا بإنشاء مؤشر ترابط ينتظر الأحداث (مكالمات الأسلوب المسماة). يمكن أن يحدث رمز آخر في الفصل بشكل متزامن في مؤشر الترابط (الرسائل) الأصلية. يجب وضع الكلمات الرئيسية "في قائمة الانتظار" قبل تعريف آلة الحالة.

يرى http://statemachines.umple.org. لمزيد من المعلومات حول إنشاء آلات الدولة في Humple. يمكنك التفكير في Humple باعتباره مجرد ما قبل مسبق ل Java (ولغات أخرى) في هذا السياق.

يمكنك أيضا استخدام قفل و شرط (جافا 1.5+). انها مثل wait/notify وهناك مثال في Javadoc

حاول استخدام أ يضخ بين مؤشر ترابط مصدر الحدث وخيط تجسيد FSM. هذا يكفي لتنفيذ 2 الخيوط.

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