Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 28.02.11 19:06 
Hallo,
gibt es Funktionen, mit denen man 2 Timer synchron laufen lassen kann? Also beide im gleichen Takt. Das bedeutet für mich, dass wen der 1 Timer durch eine Operation hinterher hängt, der 2 Timer darauf reagiert.

Mein Verwendung:
Für ein Zeitnehmer Programm (für's Hockey) muss ich auf dem Hauptformular einen Zentralen Timer haben, der die Spielzeit runter tickt.
Um dann eine Strafzeit hinzu zu fügen öffnet sich ein 2 Fenster. Auf dem ist dann der 2 Timer, der die Strafzeit runter tickt.
Wenn der Ticker der Strafzeit fertig runter getickt hat, also 0 ist, dann schreibe ich die Aktuelle Spielzeit in den Verlauf.

Nun passiert es oft, aber komischerweise nicht immer, dass es eine kleine Differenz (1 Sekunde) zwischen der Zeit, in der man das Fenster geöffenet hat (also in der Spielzeit, in der der Spieler eine Strafe bekommen hat) und in der Zeit, in der die Strafzeit abgelaufen ist (also wenn Ticker 0 ist).

Desshalb glaube ich einfach, dass die Timer nicht perfekt synchron laufen.

Was könnte ich tun?

Vielen dank im Voraus!

Grüße,
Benny


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Mi 02.03.2011 um 00:13
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 28.02.11 19:08 
Warum nimmst du nicht ein und denselben Timer dafür? In dem Timer-Event überprüfst du dann ne Liste in dem die Anfangszeiten drinstehen (bzw die Endzeiten). Und dann ergibt dir die aktuelle Zeit - Anfangszeit bzw Endzeit - aktuelle Zeit die Zeit die die strafe noch läuft bzw schon gelaufen ist.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 28.02.11 19:13 
Das ist nicht so einfach, denn das Spiel kann ja auch anghalten werden...
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 28.02.11 19:15 
und da läuft die strafe dann weiter, oder bleibt die dann auch stehen?

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 28.02.11 19:28 
Die bleibt auch stehen. Aber das ganze ist dann noch ein bisschen komplizierter.
Denn ich füge den "Sträfling" dann noch in eine mehrdimensionale Array ein. Und auf dem Haupttimer geh ich dann alle Arrays durch und ticke sie runter.

Also, was ich genau mache:
Die Spielzeit läuft...Plötzlich bekommt ein Spieler eine Strafzeit. Dann muss der Zeitnehmer sofort auf den Button, z.b "2 Minuten" drücken.
Nun speichert das Programm die aktuelle Spielzeit in einer Variablen. Jetzt kann man die Trikotnummer und die Strafzeit eintragen.
Während dieser Zeit tickt die Strafzeit schon runter, damit man sich viel zeit lassen kann und nicht in Hecktick gerät.
Wenn das alles erledigt ist drückt man auf "Hinzufügen". Nun wird das ganze Zeug in eine Array geschrieben. Ab diesem Zeitpunkt übernimmt dann wieder der Haupttimer das herunter Ticken aller Strafzeiten.

Ich hoffe ihr habt es verstand?

Hier noch ein Bild:
Moderiert von user profile iconNarses: Inline-Bild wegen Übergröße bitte direkt aus dem Anhang öffnen.
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 28.02.11 19:32 
Die Timer müssen doch ohnehin nicht synchron laufen. Denn wie oft das Timer-Event ausgeführt wurde, hat doch mit der Messung der vergangenen Zeit nichts zu tun. :nixweiss:

Du hast die Startzeit und die Strafzeit und natürlich die aktuelle Zeit, damit rechnest du und fertig. Du kannst ja z.B. GetTickCount benutzen.

Denn wenn du tatsächlich die Anzahl der Timerevents zur Zeitmessung verwendest, dann ist das so ungenau, dass der Rest auch schon egal ist. :lol:

// EDIT:
Nebenbei: Pass auf, dass du die Lizenz für die Ribbon-Controls nicht verletzt (die du dir vermutlich ja bereits geholt hast). Denn Microsoft hat für deren Verwendung relativ strenge Richtlinien aufgestellt, damit man nicht durch ein verfehltes Konzept die Ribbons insgesamt diskreditiert.
(Ich sehe jetzt hier nichts speziell, ich wollte nur darauf hinweisen. ;-))


Zuletzt bearbeitet von jaenicke am Mo 28.02.11 19:37, insgesamt 3-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 28.02.11 19:33 
wozu muss man gleich die zeit ticken sehen von dem mit der neuen strafe? schau, ich stell mir das so vor:

Foul wird angezeigt -> schiri drückt auf den 2 minuten knopf -> Programm speichert zuerstmal die aktuelle spielzeit +2 minuten in eine variable -> der typ füllt alles aus -> klickt auf fertig -> Spieler wird in "strafbankliste" eingefügt und die zeit die in der zwischenzeit vergangen ist berechnet (wie du dich erinnerst haben wir die ja schon gespeichert).

Immerhin: Wozu muss man eine Zeit laufen sehen, die einem nix bringt, da man nicht weiß wer jetzt die Strafe bekommen hat. Das sichtbare Runterzählen der Zeit hat ja sowieso nur nen sinn wenn man weiß wer die strafe begangen hat. verstehst du was ich meine?

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 28.02.11 19:38 
Na die Strafzeiten werden dann in den unteren Kästen Rechts und Links angezeigt und werden runter getickt.

Warum sollte man nicht wissen, wer die Strafe bekommen hat? Man trägt doch au die Trikotnummer ein.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 28.02.11 19:45 
Wenn dann alle informationen eingegeben sind, wird ja eh die Trikotnummer, Strafzeit und so weiter angezeigt. Nur bis alle Informatione eingegeben sind, ist es ja genau wurscht ob ich schon einen Countdown sehe. Der wird erst interessant wenn ich dann auch sehe wer den countdown bekommen hat. Insofern brauchst du nur einen Timer die die Strafliste überwacht und dir den countdown dann anzeigt.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 28.02.11 19:50 
Eben nicht ;) Zuerst ist es wurscht wer die Strafe bekommt. Es ist nur wichtig dass die Strafzeit, egal für wen, schon runterläuft. Denn wenn man erst nachdem man auf hinzufügen drückt den Countdown startet, dann sitzt der Spieler genau die Zeit zu lange auf der Strafbank, die der Typ gebraucht hat um die Daten einzugeben.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 28.02.11 19:53 
Die läuft ja schon runter weil du beim drücken von "2 minuten strafe" genau den zeitpunkt der strafe erfasst. Nur läuft sie nicht sichtbar sekunde für sekunde runter sondern der Timer rechnet dann herum, bei jedem timer-event.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Mo 28.02.11 19:57 
Ahaaa. Okay, jetzt weiß ich was du meinst. Also ist das Runterticken in einem extra Timer während dem Eingeben Misst. Stimmt.
Gut, dann werde ich das gleich morgen so übernehmen und gucken ob es funktioniert.

Vielen Dank!!

Grüße,
Benny

//Edit:

Um nochmal sicher zugehen, ob ich es auch richtig verstanden habe:
Wenn der Schiri den "2 Minuten" Button gedrückt hat, speicher ich die aktuelle Spielzeit zwischen. Nun kann man alle Daten in Ruhe eingeben.
Wenn dann der "Hinzufügen" Button gedrückt wird, wird die aktuelle Spielzeit mit der zwischen gespeicherten Spielzeit subtrahiert. Dann wird einfach noch die 2 Minuten - mit der Differenz subtrahiert und fertig. Stimmts?
FinnO
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1331
Erhaltene Danke: 123

Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
BeitragVerfasst: Di 01.03.11 20:20 
Irgendwie ist das Konzept etwas schwammig. Eigentlich braucht man insgesamt exakt einen Timer, der in regelmäßigen Abständen einen haufen Methoden aufruft, die sich ums Management deiner Anwendung kümmern. Dabei kann dann verglichen werden, ob die Spielzeit abgelaufen ist (z.B. via GetTickCount, welches allerdings auch nicht gerade 100%ig genau ist.). Der Timer dient NICHT zum Zeitmessen, sondern nur dazu,ein Event in halbwegs regelmäßigen Abständen zu feuern.
LittleBen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Di 01.03.11 23:22 
Mhhhh, da hast du eig. recht. Naja, ich hab es jetzt erstmal auf die andere Art gemacht und es funktioniert auch wunderbar!
Danke dafür nochmal!

Grüße,
Benny