[Delphi] Komunikat o pelnych minutach

0

Czy da się wykonać jakąś operację o określonej godzinie, nie używając timera? Moze jest jakis komunikat który można przechwycic dokładnie o pełnych minutach?

0

A dlaczego nie chcesz użyć Timera?

0

Wątek (klasa TThread)

0
Oleksy Adam napisał(a)

A dlaczego nie chcesz użyć Timera?

Program ma liste czynności, które ma wykonać o danych godzinach. Jeśli użyje timera to trzeba by go co jakis czas synchronizowac żeby program byl odporny na zmianę czasu w systemie. Teraz pewnie ktos napisze, ze moge przy kazdym onTimer sprawdzac calą liste, ale to nie ma sensu i obszedłem to w ten sposób, że w ontimer wykonywane jest tylko porównanie czy czas aktualny jest juz równy czasowi przy którym ma cos wyświetlać, jesli tak to pobiera czas do kolejnego... No ale taka metoda ma swoje wady, lepiej jest chyba wykonywać sprawdzanie o pełnych minutach i dlatego pytam, czy jest coś takiego możliwe. Aktualnie zrobiłem synchronizację (odpowiedni interval) timera do pełnych minut ale to ma też pewne przesunięcia.

0

rol, możesz podać jakis przykład wątków ? nie bardzo się na tym znam :-/

0

Rozdział 8
Wątki

szukajcie a znajdziecie ;-)

0

Znalazlem jeszcze jeden problem jeśli chodzi o timery:
po ustawieniu interval na 1000 i w onClick:

        if SFirstRun=True then
        begin
                SFirstRun:=False;
                SLastTime:=StrToTime(TimeToStr(now))-StrToTime('00:00:01');
        end;
        SLastTime:=SLastTime+StrToTime('00:00:01');
        Label10.Caption:=timetostr(strtotime(timetostr(now))-(SLastTime));
        Label11.Caption:=timetostr(strtotime(timetostr(now)));

licznik co kilka sekund przeskakuje co 1 sek :-/
mam na przykład:
9,10,12,13,...
czyli label10.caption:=9 ... 10 ... 12 ... 13
czy jest możliwe ze timer jest az tak niedokladny?

0

a co ma do tego onclick ? po co dajesz tyle StrToTime - to chyba jest duża procedura do małej rzeczy a StrToTime(TimeToStr(Now)) jest trochę mało normalne
rób na wątkach jw.

poza tym możliwe że są aż tak niedokładne - no załózmy że będzie 1,05 sekundy odmierzać zamiast jednej i już co 20 sekund będzie nagły przeskok jednej sekundy, a timer działa w zależności od obciążenia komputera właściwie czyli zależy co na nim robisz to możesz mieć różne pomiary ...

0
var
 Present : TDateTime;
 Hour, Min, Sek, MSec : Word;
begin
 Present := Now;
 DecodeTime(Present, Hour, Min, Sek, MSec);
 if (Hour = 09) and (Min = 31) and (Sek = 0) then ShowMessage('Jest godz: 9.30');
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1