AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Zwei unabhängige Zeitschleifen D7
Thema durchsuchen
Ansicht
Themen-Optionen

Zwei unabhängige Zeitschleifen D7

Ein Thema von beanbear6 · begonnen am 27. Aug 2014 · letzter Beitrag vom 30. Aug 2014
Antwort Antwort
Seite 1 von 2  1 2      
beanbear6

Registriert seit: 28. Okt 2009
Ort: Passau
170 Beiträge
 
Delphi 7 Enterprise
 
#1

Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 13:40
Hallo Profis,
ich hab ein ganz spezielles Problem: eine Listbox1 wird im 250ms Takt abgearbeitet. Wird in dieser Box ein bestimmter Eintrag gefunden, wird eine weitere Zeitschleife mit Befehlen gestartet - dauert verschieden lang, z.B. 1 bis 5 Sekunden. Während dieser Zeit aber steht die erste Schleife der Listbox1.
Wie könnte man das machen, dass diese beiden Schleifen unabhängig laufen? Der Sinn der Sache ist folgender:
In der ersten Schleife gebe ich Licht(DMX) Daten an Scheinwerfer raus. Ist nun in der ersten Schleife ein Fade von z.B. 3 Sekunden eingestellt, so wird über ein Delay (Schleife2) der Scheinwerfer gedimmt. Und genau während dieser Zeit schläft sozusagen die erste Schleife und damit bin ich dann nicht mehr synchron mit der (dazu) laufenden Musik.
Das Ganze ist etwas schwierig zu erklären ich hoffe man kanns einigermaßen verstehen. Bin für jeden Tip mega Dankbar...
Gruß beanbear
Reiner
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 13:59
Dafür kannst du den Inhalt deiner Listbox an einen Thread übergeben und das ganze asynchron von diesem regeln lassen. Dieser steuert dann wiederum weitere Threads, in denen die weiteren Steueraufgaben ausgeführt werden.

Die Alternative wäre, dass du die Abarbeitung nicht direkt hintereinander machst, sondern die Aktionen stückchenweise abarbeitest, dabei aber immer alle durchgehst. Sprich du schreibst alle abzuarbeitenden Aktionen in eine Liste und gehst dann immer die Liste durch und sagst jedem Eintrag, dass er einen Schritt weiter machen soll. Sind alle Schritte ausgeführt, wird der Eintrag aus der Liste entfernt.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 14:05
Ähm "den Inhalt der Listbox an einen ... übergeben" halte ich nun nicht wirklich für klug gewählt.

Die Listbox kann anzeigen was sie möchte oder was sie soll, aber eben anzeigen.
Die Steuerung hat die auszuführenden Teile in einer Liste/Queue und arbeitet diese von da ab. Der Inhalt kann natürlich auch in einer Listbox visualisiert werden.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
beanbear6

Registriert seit: 28. Okt 2009
Ort: Passau
170 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 14:54
Hi,
ich hab keinen Ansatz, wie ich das machen soll... Hilfts etwa, wenn i bissl Quellcode poste? Und wie kann ich eine andere Schleife asynchron laufen lassen? Habts da no paar tips? Danke Euch für Eure Postings
Gruß beanbear
Reiner
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 15:06
Du darfst diese "Zeitschleifen" nicht im Hauptthread laufen lassen, sondern jede in ihrem eigenen Thread. Der Hauptthread ist hauptsächlich zur Kommunikation mit dem Benutzer gedacht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 15:47
Ich denke dein Ansazt ist verkehrt. Bei meiner DMX-Software habe ich einen Thread, der für das DMX-Universum zuständig ist (Ausgabe, Aktualisierung, Eingabe, usw.), dem Universum wird einfach ein DMX-Wert und die Fadetime übergeben.
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 15:52
Mit einem Standard-Timer wird man wohl zwangsweise immer irgendwan etwas der Musik hinter her oder vorweg laufen, selbst wenn man es "richtig" macht. Die Ungenauigkeiten addieren sich nach einiger Laufzeit sicherlich bemerkbar auf. Es wäre daher allein aus diesem Grund schon mal sinnig, einen Multimedia-Timer (viele Themen zu hier in der DP) zu nutzen.

Was die anderen aber auch schon sagten: Verabschiede dich am besten so früh wie möglich davon mehrere Timer zu benutzen. Baue dir eine Klasse, mit der du die nötigen Aktionen abbilden kannst, und nutze diese als Elemente einer Liste. Diese befüllst du anhand dessen, was in deinem DMX-Ablauf vorgeschrieben ist, und arbeitest sie dann durch. Aktionen die parallel stattfinden werden auch im selben Timer-Tick mit verarbeitet, dadurch ist u.a. auch sicher gestellt, dass die Abläufe synchron zu sich selbst sind.

Was du jetzt hast, klingt nach einer Timer-Schlacht mit mächtig Ausart-Potenzial und ggf. wackeligem Resultat. Nutze einen Taktgeber für alle, und viele Probleme lösen sich schon mal fast von selbst.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
beanbear6

Registriert seit: 28. Okt 2009
Ort: Passau
170 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 16:56
Hallo zusammen,
also ich hab nicht mehrere Timer, sondern nur einen... die zweite
Zeitschleife mach ich über Delay. Und genau um diese Zeit hängt
der Timer. Hier mal Codeschnippsl...

Delphi-Quellcode:
procedure TMain.StrListTimerTimer(Sender: TObject);
var i,k : Integer;
begin
  L.LoadFromFile('SC11_ROT ROT 100 F1.dat'); // hier ist ein Fade von 1 Sekunde eingetragen

  for i:=0 to 479 do begin // hier gebe ich die DMX Daten (Kanäle raus)
    dmxalt[i]:= dmxout[i];
    dmxneu[i]:=StrToInt(L.Strings[i]);
  end;

  // HIER BEGINNT DAS PROBLEM....
  // Um diese Delaytime verschiebt sich die Zeit
  // Wie krieg ich dieses Delay unabhängig ??
  for K:=0 to 100 do begin
    Delay(Trunc(StrToInt(l[481])/100));
    for I:=0 to 479 do //nach von
      DMXOut[I]:= Trunc((dmxneu[I] * K + dmxalt[I] * (100-K))/100);
  end;

  If Zahl < DMXList.Count-1 then begin
    Inc(Zahl);
    StrListTimer.Interval := StrToInt(Copy(DMXList[Zahl],1,Pos(',',DMXList[Zahl])-1))-StrToInt(L[481]); // Hier hol ich die neue Zeit für die nächste DMX-Scene
  end else begin
    StrListTimer.Enabled:= False;
    l.Free;
  end;
Hat bitte jemand irgendwie paar Zeilen die mir helfen könnten? Ich hab keinen Ansatz, wie ich das angehen soll... Bin echt dankbar für jede Hilfe...
Gruß beanbear
Reiner
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#9

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 17:00
Wenn Du bei dieser Lösung bleiben willst, dann ziehe doch das Delay vom zu setzenden Timer-Intervall ab.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
beanbear6

Registriert seit: 28. Okt 2009
Ort: Passau
170 Beiträge
 
Delphi 7 Enterprise
 
#10

AW: Zwei unabhängige Zeitschleifen D7

  Alt 27. Aug 2014, 17:04
Hi,
das geht nicht weil es kann sein, dass das delay länger ist als das Timerinterval und dann krieg ich ne negative zeit. Wenn ich ne andere Lösung wüsste, würd ichs machen. Aber bitte nicht böse sein es ist auch nicht böse gemeint, aber die bisherigen Antworten kann ich nicht umsetzen ich weis nicht wie das alles gemeint ist... bin nicht der guru in Delphi
Kann mir bitte jemand bissl Code mit kurzer Erklärung posten damit ich nen Ansatz hab und das auch verstehen kann?
Gruß beanbear
Reiner
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz