ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
111209 Топик полностью
=AlexD= (25.01.2008 08:48, просмотров: 231) ответил Сергей Борщ на А вот снова промахнулся :( Теперь процесс, ждущий без таймаута нельзя разбудить с помощью OS::ForceWakeUpProcess() Гляньте, может так?
Может как-то так извернуться?  namespace OS { class TEventFlag { public: enum TValue { efOn = 1, efOff= 0 }; // prefix 'ef' means: "Event Flag" public: TEventFlag (TValue init_val = efOff) : ProcessMap(0), Value(init_val) { } bool Wait (TTimeout timeout = 0); void Signal (); INLINE void Clear () { TCritSect cs; Value = efOff; } INLINE void SignalISR (); INLINE bool IsSignaled () { TCritSect cs; if (Value == efOn) return true; else return false; } private: TProcessMap ProcessMap; TValue Value; TProcessMap Flags; }; } bool OS::TEventFlag::Wait(TTimeout timeout) { TCritSect cs; if (Value == efOn) { ClrPrioTag(Flags, PrioTag); if (Flags == 0) { Value = efOff; } return true; } else { TProcessMap PrioTag = GetPrioTag(Kernel.CurProcPriority); SetPrioTag(ProcessMap, PrioTag); // put current process to wait map ClrPrioTag(Kernel.ReadyProcessMap, PrioTag); // remove current process from ready map TBaseProcess* p = Kernel.ProcessTable[Kernel.CurProcPriority]; p->Timeout = timeout; Kernel.Scheduler(); ClrPrioTag(ProcessMap, PrioTag); // remove current process from wait list Value = efOff; p->Timeout = 0; if (Value & PrioTag) // if waked-up by signal() or signal_ISR() { ClrPrioTag(Value, PrioTag); // clear flag for current process if (Flags == 0) { Value = efOff; } return true; } // otherwice waked-up by timeout or // by OS::ForceWakeUpProcess() return false; } } //------------------------------------------------------------------------------ void OS::TEventFlag::Signal() { TCritSect cs; Value = efOn; Flags |= ProcessMap; Kernel.ReadyProcessMap |= ProcessMap; // place all waiting processes to ready map Kernel.Scheduler(); }
Три кита на которых зиждется реклама: враньё, преувеличение, замалчивание. Новости СМИ - это политическая реклама.