Wywołanie funkcji o określonej godzinie

dział ogólny

Wywołanie funkcji o określonej godzinie

Nowy postprzez sawcioo » poniedziałek, 5 kwietnia 2010, 17:14

Czy znacie jakiś sposób na wywołanie konkretnej funkcji o podanej przez użytkownika godzinie? Zastanawiałem sie na dodaniem timera który ustawiał by swój interval na podstawie aktualnej godziny, ale co w przypadku gdy użytkownik zaplanuje kilka zadan(wywolan funkcji) w rożnych lub tych samych godzinach?
Avatar użytkownika
sawcioo
Bladawiec
Bladawiec
 
Posty: 8
Dołączył(a): piątek, 16 października 2009, 18:42
Podziękował : 0
Otrzymał podziękowań: 0
    Windows 7Firefox

Re: Wywołanie funkcji o określonej godzinie

Nowy postprzez Cyfrowy Baron » poniedziałek, 5 kwietnia 2010, 18:26

Program powinien sprawdzać w określonych odstępach czasu aktualną godzinę i porównywać ją z zadaną godziną. Może to robić w zdarzeniu OnTimer obiektu Timer w odstępach minutowych. Samo sprawdzanie godziny może okazać się niewystarczające, dlatego należałoby sprawdzać godzinę i minutę, zakładając, że program ma to robić z dokładnością do minuty:

Kod: Zaznacz cały

int hour 
= 10; // zdana godzina
int min = 45; // zadan minuta

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
 
SYSTEMTIME sTime;
 
GetLocalTime(&sTime); // pobiera aktualny czas systemu

 
if(sTime.wHour >= hour)
 {
   if(
sTime.wMinute >= min)
   {
     
// tutaj umieszczamy funkcję która ma być wywołana
   
}
 }  
}
 


Jeżeli tych czasów ma być więcej, to należy je gdzieś umieszczać, można zapamiętywać w pliku i wczytywać do listy typu TStringList, potem z wykorzystaniem pętli porównywać wszystkie zapisy w zdarzeniu OnTimer. Zapis godziny w pliku musi być zawsze tak samo formatowany, przykład z wypełnioną listą:

Kod: Zaznacz cały

TStrings 
*timeList = new TStringList;
timeList->Add("19:18");
timeList->Add("11:15");
timeList->Add("13:5");
timeList->Add("20:25");
 
SYSTEMTIME sTime;
 
GetLocalTime(&sTime);

 for(
int i = 0; i < timeList->Count; i++)
 {
  
String hTekst = timeList->Strings[i];
  
int p = hTekst.Pos(":");
  
int hour = (hTekst.SubString(0, p - 1)).ToInt();
  
int min  = (hTekst.SubString(p + 1, 2)).ToInt();

  if(
sTime.wHour == hour)
  { 
   if(
sTime.wMinute == min)
   {
     
// wywołaj funkcję
   
}
  }
 } 
}
 


To tyle jeżeli chodzi o sprawdzanie czasu, gdyż zadanie wymaga jeszcze opracowania funkcji, która będzie o określonym czasie wykonywać określone zadanie. Zadanie również powinno być przechowywane w pliku obok godziny i wykonywane przez funkcję. Funkcja wykona tylko zadania pre-definiowane w programie, czyli program musi mieć zaprogramowane zadania do wykonania. No ale przecież to Ty piszesz ten program nie ja. Na pytanie odnośnie czasu już odpowiedziałem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości

cron