Re: TThread-Execute wird nicht ausgefürhrt warum ?
verstehe ich nicht ganz, wo deiner meinung nach sollte ich es machen ???
|
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:
und in der Methode "onE" dann aufrufen mit:
procedure TMyThread.ClearLines;
begin Form1.Memo1.Lines.Clear; end;
Delphi-Quellcode:
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.
procedure TMyThread.onE;
begin . . Synchronized(ClearLines); // an Stelle von Form1.Memo1.Lines.Clear; . . end; Zeig doch wenn es noch nicht klar ist die "onE" - evtl. kann man's am konkreten Bsp. besser erklären. :cheers: dizzy \\edits: Schlechtschreibdinger... |
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; |
Re: TThread-Execute wird nicht ausgefürhrt warum ?
Delphi-Quellcode:
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 :?.
// 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; 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? |
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. |
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