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
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: FastSwitch

  Alt 26. Dez 2013, 22:02
Mache es doch einfach so, das nicht 1000 gleichzeitig geladen werden, sondern maximal 5. Oder 3 oder 10.

Wenn nur das Entladen so lange dauert, ist das doch wurscht.
Ich denke du hast mir schon sehr geholfen..
Ich muss mal meinen ganzen repeat Mist rauswerfen und anstelle dessen mit Events arbeiten.


gruss

Geändert von EWeiss (27. Dez 2013 um 00:06 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: FastSwitch

  Alt 27. Dez 2013, 00:06
Hab jetzt wieder stunden damit verbracht komme auf keinen Nenner. Da kann man nur eins zu sagen
Ich muss jetzt was pennen.

gruss
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: FastSwitch

  Alt 27. Dez 2013, 16:03
Es scheint mir das die bisherigen Lösungen nicht zum ziel führen.

Delphi-Quellcode:
procedure TBASSSoVis.BassSonVisStop;
var
  WaitRe: Cardinal;
begin
  EndByProgram := True;

  if (RenderThreadId <> 0) then
  begin
    PostThreadMessage(RenderThreadId, WM_QUIT, 0, 0);
    hEventFree := CreateEvent(nil, True, False, nil);
    try
      repeat
        WaitRe := WaitForSingleObject(hEventFree, 15);
        if WaitRe <> WAIT_OBJECT_0 then
          WinProcessMessages;
      until WaitRe = WAIT_OBJECT_0;
    finally
      RenderThreadId := 0;
      BassSoVisFree := True;
    end;

  end else
  BassSoVisFree := True;

end;
WaitForSingleObject blockiert den Thread das ist aber nicht das was ich will
Rufe ich diese mit einer Wartezeit von 2000 auf dann blockiert/wartet der Thread bis diese zeit um ist.
wurde in dieser zeit das Event gefeuert (was aufgrund des Blockierten Threads nicht geht) wird mein Flag auf true gesetzt.
Das trifft aber niemals ein wenn das Event aus dem Thread abgefeuert wird. Also muss ein repeat her
und dann habe ich genau das was ich vorher auch hatte.

Dann kann ich genauso wie bisher Sleep(15) verwenden bleibt sich dann gleich.
Mit nur einem Thread ist das sinnlos es sei denn das Event wird wie in deinem Beispiel external also von außerhalb abgefeuert.

Und dort feuere ich ja quasi ein Event über BassVis_Free; (auch wenn es eine procedure ist)

gruss

Geändert von EWeiss (27. Dez 2013 um 16:05 Uhr)
  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
 
#4

AW: FastSwitch

  Alt 27. Dez 2013, 16:21
Die grundsätzliche Idee dabei ist folgende:
  • Eine abstrakte Klasse TPlugin (alle Methoden sind abstrakt)
  • Ein TPluginGateway , dass von TPlugin abgleitet ist und die Methodenaufrufe an das echte Plugin weitergibt, wenn es denn existiert
  • Ein TPluginController (Thread) der für das TPluginGateway das Laden/Entladen des Plugins steuert
  • Ein TPluginLoader (Thread) der vom TPluginController gestartet wird und entweder eine Plugin-Instanz erzeugt/lädt oder eine Plugin-Instanz zerstört/entlädt

Einzig der TPluginController benötigt ein Event und wartet einfach, bis was passiert ...
Delphi-Quellcode:
  procedure TPluginController.Execute;
    begin
      inherited;
      while not Terminated do
        begin
          // Warten bis etwas passiert
          FEvent.WaitFor;

          case State of
            csEmpty : // wenn leer, dann laden
              DoLoading;
            csLoading : // einfach mal nix
              ;
            csUnloading : // einfach mal nix
              ;
            csReady : // wenn bereit, dann entladen
              DoUnloading;
          end;
        end;
    end;
Im Anhang ein komplettes Projekt mit Source und Exe.

Ich verwende allerdings die Klassen der RTL und nicht native API Aufrufe (das sind im Grunde genommen nur Wrapper für die API Aufrufe).

EDIT Anpassungen für D2010
Angehängte Dateien
Dateityp: zip dp_178190.zip (813,5 KB, 4x aufgerufen)
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)

Geändert von Sir Rufo (27. Dez 2013 um 16:49 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: FastSwitch

  Alt 27. Dez 2013, 16:25
Danke für deine Mühe werde mir das mal anschauen.
Zitat:
Ich verwende allerdings die Klassen der RTL und nicht native API Aufrufe
Das ist kein Problem ob ich TThread oder API nehme kommt sich gleich.. mehr oder weniger

Hmmm sehe schon!
Du verwendest XE ?

Zitat:
[DCC Fehler] PluginController.pas(30): E2137 Methode 'TerminatedSet' nicht in Basisklasse gefunden
[DCC Fehler] PluginController.pas(122): E2250 Es gibt keine überladene Version von 'WaitFor', die man mit diesen Argumenten aufrufen kann
[DCC Fataler Fehler] dp_178190.dpr(10): F1026 Datei nicht gefunden: 'Vcl.Forms.dcu'
Auch nach Änderung auf
Zitat:
uses
Forms,
geht es nicht kommen dann die anderen oben angezeigten Fehler

gruss

Geändert von EWeiss (27. Dez 2013 um 16:35 Uhr)
  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
 
#6

AW: FastSwitch

  Alt 27. Dez 2013, 16:50
Ich habe das angepasst und erneut hochgeladen (siehe letzter Beitrag)
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
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: FastSwitch

  Alt 27. Dez 2013, 16:58
Ich habe das angepasst und erneut hochgeladen (siehe letzter Beitrag)
Danke
Hatte es auch schon so weit allerdings macht es immer noch ärger.

[DCC Warnung] PluginGateway.pas(29): W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TPlugin'
>> constructor Create; reintroduce;

stürzt ab..
FEvent := TEvent.Create( nil, False, False, '' );

Delphi-Quellcode:
  constructor TPluginController.Create;
    begin
      inherited;
[DCC Fehler] PluginController.pas(56): E2008 Inkompatible Typen
>> inherited;

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:55 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