Strona 1 z 1

Wywołanie funkcji o określonej godzinie

Nowy postNapisane: poniedziałek, 5 kwietnia 2010, 17:14
przez sawcioo
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?

Re: Wywołanie funkcji o określonej godzinie

Nowy postNapisane: poniedziałek, 5 kwietnia 2010, 18:26
przez Cyfrowy Baron
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 0timeList->Counti++)
 {
  
String hTekst timeList->Strings[i];
  
int p hTekst.Pos(":");
  
int hour = (hTekst.SubString(01)).ToInt();
  
int min  = (hTekst.SubString(12)).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.