Ejemplo n.º 1
0
        /// <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();
                }
            }
        }
Ejemplo n.º 2
0
        /// <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();
                }
            }
        }