Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TThread-Execute wird nicht ausgefürhrt warum ? (https://www.delphipraxis.net/26849-tthread-execute-wird-nicht-ausgefuerhrt-warum.html)

mimi 30. Jul 2004 14:35

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
verstehe ich nicht ganz, wo deiner meinung nach sollte ich es machen ???

dizzy 30. Jul 2004 15:28

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
Wenn z.B. in der Methode "onE" eine Zeile: "Form1.Memo1.Lines.Clear;" vorkommt, dann schreib dir dafür eine eigene Methode - z.B.:
Delphi-Quellcode:
procedure TMyThread.ClearLines;
begin
  Form1.Memo1.Lines.Clear;
end;
und in der Methode "onE" dann aufrufen mit:
Delphi-Quellcode:
procedure TMyThread.onE;
begin
.
.
  Synchronized(ClearLines); // an Stelle von Form1.Memo1.Lines.Clear;
.
.
end;
Das Problem ist, dass du in deinem Thread ja NUR die Methode "onE" ausführst, und wenn diese dann komplett Synchronized ausgeführt wird, dann wird dein 2. Thread vollständig im Hauptthread ausgeführt, was man ja gerade mit Threads verhindern will. Also sollte an so wenig Stellen wie möglich Synchronized werden.

Zeig doch wenn es noch nicht klar ist die "onE" - evtl. kann man's am konkreten Bsp. besser erklären.

:cheers:
dizzy

\\edits: Schlechtschreibdinger...

mimi 30. Jul 2004 15:54

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
ok:

Delphi-Quellcode:
{
  Fürht immer die funktion CheckPlay aus
  date   : 28.07.2004
  upDatet : 28.07.2004
}

procedure TSound.onE;
begin
  CheckPlay;
end;
Delphi-Quellcode:
{
  Schaut nach ob die musik zu ende ist oder nicht
  date   : 28.07.2004
  upDatet : 28.07.2004
}

procedure TSound.CheckPlay;
begin

  if (PlayMusikIndex > -1) and (isRandom = False) then begin

    if (Musik[PlayMusikIndex].Module <> NIL) and (FMUSIC_IsFinished(Musik[PlayMusikIndex].Module) = True) then
      randomMusik;

    if (Musik[PlayMusikIndex].Stream <> NIL) and ( FSOUND_IsPlaying(Musik[PlayMusikIndex].Channel) = False) then
      randomMusik;
  end;

end;

dizzy 30. Jul 2004 18:37

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
Delphi-Quellcode:
// etwas hübscher: ;)
procedure TSound.CheckPlay;
begin
  if (PlayMusikIndex > -1) and (isRandom = False) then
  begin
    if ((Musik[PlayMusikIndex].Module <> NIL) and (FMUSIC_IsFinished(Musik[PlayMusikIndex].Module) = True)) or
       ((Musik[PlayMusikIndex].Stream <> NIL) and (FSOUND_IsPlaying(Musik[PlayMusikIndex].Channel) = False)) then randomMusik;
  end;
end;
Hmmmm... Also wenn Musik, PlayMusikIndex, isRandom, FMUSIC_IsFinished, FSOUND_IsPlaying und randomMusik alles Felder und/oder Methoden von TSound sind, und randomMusik auch nur Zugriffe auf TSound-eigene Felder/Methoden macht, dann liegt das Problem wo anders - und ich wüsste auf Anhieb jetzt nicht wirklich wo :?.

Für den Fall, dass da z.B. eine DLL oder eine Kompo der VCL mit im Spiel ist (was ich hieraus nicht erkennen kann), dann wäre ein Synchronize hier und da angebracht.

Aber es ist doch lediglich eine Prüfung, ob noch etwas angespielt wird, oder? Wäre es da nicht einfacher einfach einen Timer zu nehmen, der alle paar Sekunden mal nachschaut?

mimi 30. Jul 2004 19:13

Re: TThread-Execute wird nicht ausgefürhrt warum ?
 
das habe ich versucht mit einem Timer zu machen, doch leider ruckelt dann das Spiel, egal was ich für ein intervall nehme


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

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