ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
95210 Топик полностью
Sergey Pinigin (25.07.2007 18:11, просмотров: 1) ответил Evgeny_CD на Я же говорю, что в ++ я не силен :((
попробую пояснить имеется канал для слонов <c> OS::channel<TSlon*, 8> SlonQueue; // OS::channel object for 8 'TSlon' items </c> имеется два слона <c> TAfricanSlon African; TIndianSlon Indian; </c> первый во время еды чавкает один раз, другой два <c> class TAfricanSlon : public TSlon { public: virtual void eat() { TCritSect cs; PDR5_P55 = 1; // LED 1 On PDR5_P55 = 0; // LED 1 Off } }; //------------------------------------------------------------------------------ class TIndianSlon : public TSlon { public: virtual void eat() { TCritSect cs; PDR5_P55 = 1; // LED 1 On PDR5_P55 = 0; // LED 1 Off PDR5_P55 = 1; // LED 1 On PDR5_P55 = 0; // LED 1 Off } }; </c> Два процесса гонят слонов в канал, <c> ... SlonQueue.push(&African); ... SlonQueue.push(&Indian); ... </c> который обрабатывается в третьем процессе. <c> SlonQueue.pop(p); // get pointer from queue p->eat(); // feed the appropriate Slon </c> Дык вот, каждый слон чавкнет столько, сколько у него записано в методе eat(), без всяких нагородок if и switch в случае с Си. Даже если какая-нибудь коза заблудится, то и ее "накормят", если у нее будут прописан eat() :-)