/// <summary> /// Pokrece se svaki sat, i vrsi racunanje trenutne potrosnje za prethodni sat /// </summary> public override void Collector() { Console.WriteLine(DateTime.Now + ": Hourly job is running..."); //Sacekati da odradi FiveMinuteJob, i da znak FMJ_HJ_Semapthore.WaitOne(); // Inicijalizacija Tabele TableInitializer <FiveMinutesItem, HourlyItem>(); //Signalizirati DailyJob da moze da pocne HJ_DJ_Semapthore.Release(); while (true) { // Trenutno vreme DateTime current = DateTime.Now; // Jedan sat pre budjenja DateTime startTime = CalculateStartInterval(current); // Prvi okrugao sat DateTime endTime = CalculateEndInterval(startTime); // Vreme koliko treba da se spava do prvog okruglog sata int sleepTime = (int)(endTime - current).TotalMilliseconds; Console.WriteLine(DateTime.Now + ": Hourly job sleeps..."); // Spava Thread.Sleep(sleepTime); Console.WriteLine(DateTime.Now + ": Hourly job calculates..."); //Sacekati da odradi FiveMinuteJob, i da znak FMJ_HJ_Semapthore.WaitOne(); CalculateAndStore <FiveMinutesItem, HourlyItem>(startTime, endTime); // Ako je to kraj dana i treba da se aktivira DailyJob if (startTime.Hour == 23) { //Signalizirati DailyJob da moze da pocne HJ_DJ_Semapthore.Release(); } } }
/// <summary> /// Pokrece se svaki dan u 24h, i vrsi racunanje trenutne potrosnje za prethodni dan /// </summary> public override void Collector() { Console.WriteLine(DateTime.Now + ": Daily job is running..."); // Ceka znak od HourlyJob-a da je zavrsio pa da moze da odradi svoj posao HJ_DJ_Semapthore.WaitOne(); // Inicijalizacija Tabele TableInitializer <HourlyItem, DailyItem>(); // Obavesti MonthlyJob da moze da pocne DJ_MJ_Semapthore.Release(); while (true) { // Trenutno vreme DateTime current = DateTime.Now; // Pocetak dana DateTime startTime = CalculateStartInterval(current); // 23:59 min - kraj dana DateTime endTime = CalculateEndInterval(startTime); // Vreme koliko treba da se spava do prvog okruglog sata int sleepTime = (int)(endTime - current).TotalMilliseconds; Console.WriteLine(DateTime.Now + ": Daily job sleeps..."); // Spava do kraja dana Thread.Sleep(sleepTime); // Ceka znak od HourlyJob-a da je zavrsio pa da moze da odradi svoj posao HJ_DJ_Semapthore.WaitOne(); Console.WriteLine(DateTime.Now + ": Daily job calculates..."); CalculateAndStore <HourlyItem, DailyItem>(startTime, endTime); // Ako je to zadnji dan u mesecu i kraj dana onda treba da se aktivira MonthlyJob if (current.Day == DateTime.DaysInMonth(current.Year, current.Month) && current.Hour == 23) { // Obavesti MonthlyJob da moze da pocne DJ_MJ_Semapthore.Release(); } } }