Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Zwei unabhängige Zeitschleifen D7 (https://www.delphipraxis.net/181591-zwei-unabhaengige-zeitschleifen-d7.html)

beanbear6 27. Aug 2014 12:40

Zwei unabhängige Zeitschleifen D7
 
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

jaenicke 27. Aug 2014 12:59

AW: Zwei unabhängige Zeitschleifen D7
 
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.

Sir Rufo 27. Aug 2014 13:05

AW: Zwei unabhängige Zeitschleifen D7
 
Ä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.

beanbear6 27. Aug 2014 13:54

AW: Zwei unabhängige Zeitschleifen D7
 
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

Sir Rufo 27. Aug 2014 14:06

AW: Zwei unabhängige Zeitschleifen D7
 
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.

divBy0 27. Aug 2014 14:47

AW: Zwei unabhängige Zeitschleifen D7
 
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.

Medium 27. Aug 2014 14:52

AW: Zwei unabhängige Zeitschleifen D7
 
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.

beanbear6 27. Aug 2014 15:56

AW: Zwei unabhängige Zeitschleifen D7
 
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

Union 27. Aug 2014 16:00

AW: Zwei unabhängige Zeitschleifen D7
 
Wenn Du bei dieser Lösung bleiben willst, dann ziehe doch das Delay vom zu setzenden Timer-Intervall ab.

beanbear6 27. Aug 2014 16:04

AW: Zwei unabhängige Zeitschleifen D7
 
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 :oops::oops:
Kann mir bitte jemand bissl Code mit kurzer Erklärung posten damit ich nen Ansatz hab und das auch verstehen kann?
Gruß beanbear


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr.
Seite 1 von 2  1 2      

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