//------------------------------------------------------------------------ // Filename: // alarmclock-mon.cpp // PROGRAM DESCRIPTION // Class implementation file for the Alarm Monitor class //------------------------------------------------------------------------ #include #include "ThreadClass.h" #include "alarmclock-mon.h" //------------------------------------------------------------------------ // Alarm::Alarm() // Constructor //------------------------------------------------------------------------ AlarmMonitor::AlarmMonitor(char* Name) : Monitor(Name, HOARE), Wake("Wake") { Now = 0; // reset the clock } //------------------------------------------------------------------------ // Alarm::Slumber(int n) // Monitor procedure Slumber //------------------------------------------------------------------------ void AlarmMonitor::Slumber(int n) { int AlarmCall; MonitorBegin(); AlarmCall = Now + n; // wake up after n calls while (Now < AlarmCall) { // not time to wake up Wake.Wait(); // goes back to sleep Wake.Signal(); // wake up another sleeper } // so that he could check time MonitorEnd(); } //------------------------------------------------------------------------ // Alarm::ClockTick() // Monitor procedure ClockTick() //------------------------------------------------------------------------ void AlarmMonitor::ClockTick() { MonitorBegin(); Now++; // advance timer Wake.Signal(); // cascading wake-up MonitorEnd(); } // end of alarmclock-mon.cpp