Obsługa z Czasem

0

Mam taką systuację że program ma wykonywać określone operacje w określonym przedziale Czasowym, powiedzmy:

O godzinie 13:15 ma odtworzyć losową mp3 z playlisty. Kiedy będzie godzina 13:50 ma wstrzymnać funkcję losowania i zatrzymać dźwięk, i tak w koło macieju.

Oczywiście będzie puszczał z play listy mp3, i jak jedna się skończy to następną i tak w nieskończoność dopóki nie wybije owa 13:50 i wykonywana procedura nie zostanie zatrzymana.

Teraz sprawa czasu. Problem jest taki że jak na razie nie znalazłem porządnego czasommierza tak aby nie było żadnych spóźnień ani nadwyżek czasowych, tzn Jest 13:50 i program ma wstrzymać wykonaywanie procedury (tzn wyzerować jej działanie bo np. o 14:20 ma już wykonywać inną a ta o 13:15 już nie będzie użyta w tej sesji komputera.

Mam nadzieję że mnie jako tako zrozumieliście. Która forme robienia palylisty polecacie do tego rozwiazania?

0

Stworz nowy watek, nastepnie w zdarzeniu Timera co 1sec. dodaj kod sprawdzajacy czy jest dana godzina...

Tak chyba jest najprosciej.

0

Tylko Timer ma odchyły z czasem, i przy dłuższej pracy różnica czasu wynosząca choćby 5 sekund może grozić poważnymi konsekwencjami osobistymi.

0

hmm.....

a moze by sprobowac w petli (w osobnym watku) jakas procedurke napisac, ktora pobiera czas.

0

Timer ma odchyły, ale jak będziesz w timerze sprawdzał systemowy czas, to nie będziesz miał większej róznicy, niż pojedyncze odchylenie timera, czyli niedużo.

0

tylko to chyba jakies obciazenie dla CPU? I tak słaby jest. A ogólnie to powoem do czego to jest. TO ma być automat do radiowęzła szkolnego, ponieważ zanim bna 10 minutowej przerwie dotrę do magazynu to musze wracać. Wieć taki automacik co ma playlistę załadowaną do kilku pól i w określonych godzinach odtwarza wylosowane mp3 i zatrzymuje. Ma ktoś jakieś rozwiązani? Na D6 Mp3 nie działa więc zsysam D7.

0

TO ma być automat do radiowęzła szkolnego, ponieważ zanim bna 10 minutowej przerwie dotrę do magazynu to musze wracać

wiec te niedokladnosci rzedu 5 sekund chyba cie nie beda przeszkadac - daj timera co np minute i sprawdzaj ktora jest godzina i porownoj czy minela juz 13:50.

TYLKO PAMIETAJ O SKROCONYCH LEKCJACH :)

0

Co minutę, to może troszeczkę za dużo. Im mniejszy dasz interval, tym szybciej będzie reagować na zmianę godziny.

0

Co minutę, to może troszeczkę za dużo. Im mniejszy dasz interval, tym szybciej będzie reagować na zmianę godziny.

jak zauwazyles - pytal czy to nie obciazy za bardzo CPU :)

a co minute to nie szkodzui, wystarczy dobrze zgrac z dzwonkami* i bedzie ok.
przeciez panstwo nauczycielstwo nie zjawia sie w salach co do sekundy :) zreszta jesli nawet to co im szkodzi 10-15 sekund muzyki??

*)albo wozne zgrac z kompem :) jak nie ma automatu :-D

0

jak zauwazyles - pytal czy to nie obciazy za bardzo CPU :)

Ale też nie będzie wielkiego obciążenia przy np. 10 sekundach.

a co minute to nie szkodzui, wystarczy dobrze zgrac z dzwonkami

To nie jest takie proste, bo timer zacznie odliczać od czasu uruchomienia programu, a nie zawsze będzie się to pokrywało ze zmianą minut w zegarku komputera. Więc teoretycznie możemy mieć opóźnienie nawet 59 sekund.

0

Nie wiem czy jest takie cos w Deplhi, ale w C++ mozna bylo pobrac czas co do milisekundy z biosu i wladowac go do strukturki. Mozesz w takim ukladzie zastosowac takie cos:

  • Program sprawdza na poczatku godzine i wrzuca ja do strukturki. Zapisuje stan sekundomierza w zmiennej.

  • Po czym zaczyna liczyc petle wedlug timera ustawionego co 5 sekund. Czyli masz wlasna zmienna z sekundami. Timer co 5 sekund dodaje do tej zmiennej 5.

  • Gdy wybija 60 sekund wrzuca nowy czas z biosu do struktury i sprawdza czy po tych 60 sekundach wszystko sie zgadza. Jesli jest odchyl czyli timer polecial za wolno i minelo 61 sekund. To ustawia wlasna zmienna sekund nie na 00 jak w nowej minucie tylko na 01 (lub wiecej jesli mocniej zwolnil). Dochodzi do auto-korekty. I po problemie.

Wiem ze to bardzo skomplikowane, a nie mam dzisiaj weny zeby siadac do help D7 :]. Wydaje mi sie ze ta funkcja to bedzie GetTime albo cos takiego. Musisz sam poprobowac. Powodzenia :]

0

Eee, po co tak cudować...? Po co jakaś autokorekta, jak starczy co kilka/kilkanaście sekund sprawdzać godzinę i dać prostego ifa?

0

Wydaje mi się ze zegarek bisu jest chyba bardziej dokładny niż ten systemowy.

Tzn chyba trzeba by zrobić wstawkę ASM, żeby pobierać godzinę z bios-a.... Dobrze myśle? Najlepiej gdyby odsługa nie opierała się o sekundy lecz była w normalnym zapisie Godziny i minut.

0

Funkcja o ktorej mowie pobiera wlasnie czas z biosu. Opiera sie na tickach zegara. Dzieki czemu mozna zobaczyc ze nawet pusta petla beirze wiecej czasu niz 1 ms :]. Czemu tak cudowac ? Bo chlopakowi zalezy co do sekundy :] Powodzenia

0

Nie ma czegoś takiego, jak czas z biosu. Jest czas z zegara czasu rzeczywistego (taki układ na płycie głównej), który pokrywa się z czasem systemowym, bo właśnie stamtąd windows bierze datę i godzinę. A jeśli ma być co do sekundy, to ja radzę interval timera dać po prostu co sekundę, nie powinno to zwiększyć specjalniue zużycia CPU. Natomiast jakieś kombinowanie raczej zmniejsza stabilność tego kodu, myślę, że dokładność takiego zegara także może być tylko mniejsza, niż w najprostszym rozwiązaniu.

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