AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FastSwitch

Ein Thema von EWeiss · begonnen am 22. Dez 2013 · letzter Beitrag vom 27. Dez 2013
 
EWeiss
(Gast)

n/a Beiträge
 
#38

AW: FastSwitch

  Alt 26. Dez 2013, 11:38
Zitat:
Also wäre eine Erklärung oder Referenz angebrachter als der Hinweis, dass das geht und eigentlich recht einfach ist.
Danke Ja!

Aber ich kann nicht von irgend jemand erwarten das er für mich code schreibt.
Daher muss ich es im Moment leider so belassen auch wenn es mich stört.
Ich muss erst mal schauen ob es ein Beispiel im Net gibt wo ich das mal schritt für schritt beim debuggen verfolgen kann.
das ist meine Lernmethode

Er hat mir ja freundlicher weise den weg gezeigt nur ich kann es nicht nachvollziehen weil es Anhaltspunkte sind.

Das ist mein Thread
Delphi-Quellcode:
function SoVisThread(glCtrl: PLongWord): DWORD;
//... nur nötiger teil
      repeat
        MsgReturn := GetMessage(Msg, 0, 0, 0);
        if ((Msg.message = WM_QUIT) or (Msg.message = WM_CLOSE)) then
          VisualizerQuitted := True
        else if Msg.message = DataReadyMsg then
        begin
          case Msg.wParam of
            DataReady:
              BassSoVis.SoRender(glCtrl^);
            RequestRestFlag:
              begin
                p1 := VisDataPointer;
                inc(p1, 70);

                p1^ := 0;
              end;
          end;
        end;

        TranslateMessage(Msg);
        DispatchMessage(Msg);
      until (integer(MsgReturn) <= 0) or VisualizerQuitted;
    end else
    PostMessage(BassSoVis.MessageHandle, DataReadyMsg, StartVisOut, 0);

  RenderThreadId := 0;

  Result := 0;
  ExitThread(0);

end;
Dieser wird beendet über
Delphi-Quellcode:
procedure TBASSSoVis.BassSonVisStop;
begin
  EndByProgram := True;

  if (RenderThreadId <> 0) then
  begin
    PostThreadMessage(RenderThreadId, WM_QUIT, 0, 0);

    repeat
      Sleep(15);
      WinProcessMessages;
    until RenderThreadId = 0;
  end else
  BassSoVisFree := True;

end;
gruss

Hier warte ich dann solange bis die RenderThreadId = 0 ist.
Also der Thread beim beenden diese auf 0 gesetzt hat.

nur beim schalten in Millisekunden Bereich funktioniert das nicht.
Auch das entfernen von Sleep(15) macht keinen unterschied.
Der Thread läuft noch während die anderen gestartet wurden.

gruss

Geändert von EWeiss (26. Dez 2013 um 14:40 Uhr)
  Mit Zitat antworten Zitat
 


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 16:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz