[Delphi 7] Countdown timer die minuten (en later secs) showt

Pagina: 1
Acties:
  • 123 views sinds 30-01-2008
  • Reageer

  • Glacier
  • Registratie: Juli 2000
  • Niet online
Edit : Kijk ff bij mijn laatste post voor wat ik nog nodig heb :P


Ik ben al dagen bezig met een programma waarmee exact op het hele uur een nieuwe winamp playlist wordt gestart (voor een internet radio station).
DJ's kunnen live shows inplannen via een client app. De live show wordt dan gestart op het hele uur.

Alleen zit ik dus met het probleem dat ik het niet voor elkaar krijg om een countdown timer te maken, zodat DJs kunnen zien over hoeveel minuten en seconden ze live on air zijn :)

Ik heb gegoogled, de search van delphi gebruikt en uiteraard de GoT search gebruikt, maar ik kom er niet uit. Ik heb lopen klooien met tTimer, maar daar krijg ik het niet voor elkaar om de tijd, die er nog te gaan is tot het ontimer event, uit te lezen.

PS : En de timer op de server die ik met wat onhandige acties heb ingesteld dat hij op exact het hele uur 'afloopt', loopt altijd ongeveer 2 minuten te laat af? :?

[ Voor 6% gewijzigd door Glacier op 15-06-2004 14:32 ]


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:36

Reptile209

- gers -

Wat je het makkelijkst kunt doen, is een TTimer op 1000 ms instellen. Dan laat je de OnTimer controleren of er aan de voorwaarden voor het beginnen van de show wordt voldaan. Zo niet, dan toont 'ie de tijd.
Laat anders eens zien wat je nu hebt en waar het misgaat. Timers lopen niet op de milliseconde nauwkeurig, maar 2 minuten is bizar. Klopt de tijd op je server wel met die op de client? Probeer eens: cmd > net time /set \\<ip-van-server>

[ Voor 15% gewijzigd door Reptile209 op 09-06-2004 17:01 ]

Zo scherp als een voetbal!


  • Glacier
  • Registratie: Juli 2000
  • Niet online
Reptile209 schreef op 09 juni 2004 @ 16:57:
Wat je het makkelijkst kunt doen, is een TTimer op 1000 ms instellen. Dan laat je de OnTimer controleren of er aan de voorwaarden voor het beginnen van de show wordt voldaan. Zo niet, dan toont 'ie de tijd.
Wordt het programma dan niet opeens heel zwaar omdat ik elke seconde iets checkt?
Laat anders eens zien wat je nu hebt en waar het misgaat. Timers lopen niet op de milliseconde nauwkeurig, maar 2 minuten is bizar.
Zal wel een rekenfoutje zijn ofzo...
Die timer die elk uur moet afgaan wordt namelijk elke 5 minuten geupdate dmv een andere timer :P Dit om het eventueel veranderen van de tijd (door systeembeheerder of wereldklok prog) op te vangen en te garanderen dat hij niet scheef gaat lopen na dagen aan te staan...
Klopt de tijd op je server wel met die op de client?
Momenteel ben ik lokaal aan het testen, de server en de client draaien allebei op dezelfde computer :)

[ Voor 10% gewijzigd door Glacier op 09-06-2004 17:06 ]


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:36

Reptile209

- gers -

Doe dan eens wat relevante code, want volgens mij ben je het jezelf wel erg moeilijk aan het maken... timers die timers updaten... :)

Zo scherp als een voetbal!


  • Glacier
  • Registratie: Juli 2000
  • Niet online
Reptile209 schreef op 09 juni 2004 @ 17:14:
Doe dan eens wat relevante code, want volgens mij ben je het jezelf wel erg moeilijk aan het maken... timers die timers updaten... :)
De problemen zijn de wereld uit :)
De client heeft een countdown timer die elke seconde ververst :) En het werkt goed :)
De server versie die er 2 minuten naast zat kwam door een blundertje van mij :P
Ik trok van de minuten 1 af (omdat je anders 1 minuut te laat uitkomt), maar daarna deed ik pas de remainingminutes rekensom (remainingminutes := 60 - CurrentMinutes). Dan kom je 2 minuten verkeerd uit enzo :P

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:36

Reptile209

- gers -

Heel mooi. Straks een spam-linkje naar de werkende pagina? ;)

Zo scherp als een voetbal!


  • Glacier
  • Registratie: Juli 2000
  • Niet online
Reptile209 schreef op 09 juni 2004 @ 18:10:
Heel mooi. Straks een spam-linkje naar de werkende pagina? ;)
dat niet, want ik ben tot de ontdekking gekomen dat ik nu een ander probleempje heb :P
De client countdown is eigenlijk helemaal niet opgelost :)
Het werkt namelijk zo dat ik eerst dus rekening wilde houden met het tijdsverschil tussen de client en de server door de server de client eenmalig het aantal seconden terug te laten geven tot de DJ on air was.
Alleen nu heb ik het dus zo geklust dat de countdown van de client de tijd pakt van de client computer...en aangezien de tijd van de client computer ongeveer 4,5 minuut scheelt met de server,werkt dit dus niet goed :)
Ik heb een manier nodig om het aantal nog resterende seconden / miliseconden van de geactiveerde timer uit te lezen, anders gaat het niet werken zoals ik bedoel heb :)

Situatie :
Server applicatie draait (duh :P )
Client applicatie connect met de server en cued een live programma.
De server geeft het aantal seconden terug dat er nog te gaan is tot de live show
De client applicatie activeert een timer die elke seconde moet worden uitgelezen om de DJ op te hoogte te houden hoe lang het nog duurt voordat hij on air is.

Alvast bedankt :)

[ Voor 7% gewijzigd door Glacier op 15-06-2004 14:33 ]


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:36

Reptile209

- gers -

Als je nou op de Client het volgende doet:

<client ontvangt het aantal seconden resterend, slaat ze op in TijdTeGaan>
<Start een TTimer die elke 1000 ms "tikt">

in de OnTimer:
Delphi:
1
2
3
4
5
6
begin
  Dec(TijdTeGaan);
  DrukTijdTeGaanAf();
  if TijdTeGaan = 0 then
    SchopDJDatIeMoetStarten();
end;

Dan ben je er toch :? (Je kan natuurlijk ook de tijd van de timer op bijvoorbeeld 100 ms zetten voor de 0,1 seconde update. Lager zou ik niet gaan, want dat trekken timers meestal niet.

Zo scherp als een voetbal!


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-05 23:27

Tomatoman

Fulltime prutser

Computers die in een domein hangen worden automatisch gesynchroniseerd met een time server in het domein. Dat gebeurt standaard iedere acht uur en afhankelijk van hoe sterk een client de neiging heeft om uit de pas te gaan lopen wordt dit interval automatisch vergroot. Als er in het netwerk geen computer is die als time server dient, kun je een time server op internet aanwijzen. Dat doe je op domeincontroller. Zie de help files van de server (zoekwoord bijvoorbeeld ‘time server’) voor meer informatie.

Computers die niet in een domein hangen, kunnen zelf automatisch de tijd synchroniseren met een time server op internet. Dat gebeurt standaard echter met veel grotere tussenpozen (ik geloof een week).

Een goede grap mag vrienden kosten.


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 23-05 23:27

Tomatoman

Fulltime prutser

Reptile209 schreef op 15 juni 2004 @ 15:44:
in de OnTimer:
Delphi:
1
2
3
4
5
6
begin
  Dec(TijdTeGaan);
  DrukTijdTeGaanAf();
  if TijdTeGaan = 0 then
    SchopDJDatIeMoetStarten();
end;
Regel 4 is heel gevaarlijk als je met tijden werkt. De kans bestaat namelijk dat er meer tijd voorbij gaat dan het timer-interval. Beter is daarom:
Delphi:
4
  if TijdTeGaan <= 0 then

Een goede grap mag vrienden kosten.

Pagina: 1