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
Seite 1 von 5  1 23     Letzte »    
EWeiss
(Gast)

n/a Beiträge
 
#1

FastSwitch

  Alt 22. Dez 2013, 11:41
Hab da mehr oder weniger ein kleines problem mit meiner Library
Meine Plugins werden über einen Thread verwaltet und warten mit WaitForSingleObject 1 Sekunde lang bis das ThreadHandle zerstört wird.

Die Plugins können im VollBild mit den Tasten Up/Down vor oder zurück geschaltet werden.
Nun gibt es Leute die einfach nicht warten können und den Finger auf der Taste halten
das bedeutet das die Plugins dann innerhalb einer ms entladen und neu geladen werden.

Wie kann man das bewerkstelligen das in dieser zeit die DLL's ordnungsgemäß entladen/neugestartet werden können?
Ich für meinen Teil argumentiere damit das dies nicht der normale weg ist und einem Stresstest gleich kommt.

Gibt es da ne saubere Lösung zu?

gruss
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: FastSwitch

  Alt 22. Dez 2013, 11:52
Blockiere doch die Tastatur für die Wartezeit.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: FastSwitch

  Alt 22. Dez 2013, 12:15
Blockiere doch die Tastatur für die Wartezeit.
Das wäre eigentlich ideal..
Ist das auch legitim? Was ist wenn die Anwendung aus unersichtlichen gründen abstürzen würde
dann ist die Tastatur blockiert oder?

Gibt es da irgendwo nähere Informationen?

Hmm eventuell mit BlockInput..
Lieber wäre mir dann nur die beiden Tasten zu sperren.
Aber ein Hook verursacht wieder AntiVirus Probleme .

gruss

Geändert von EWeiss (22. Dez 2013 um 12:22 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: FastSwitch

  Alt 22. Dez 2013, 12:34
Ich entprelle das einfach mit einem Timer (ca. 50-100ms). Der Tastendruck startet den Timer (immer wieder) neu.
Der Timer selbst lädt dann das Plugin. Das bedeutet im echten Leben, das ...
1. das einmalige Drücken der Taste mit 50-100ms Verzögerung zu einem Ergebnis führt (kaum bzw. gar nicht spürbar)
2. das kontinuierliche Drücken überhaupt nichts bewirkt und erst beim Loslassen mit der o.g. Verzögerung das Plugin geladen wird.

Alternativ speicherst Du deine Plugins zwischen.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: FastSwitch

  Alt 22. Dez 2013, 12:37
Ich entprelle das einfach mit einem Timer (ca. 50-100ms). Der Tastendruck startet den Timer (immer wieder) neu.
Der Timer selbst lädt dann das Plugin. Das bedeutet im echten Leben, das ...
1. das einmalige Drücken der Taste mit 50-100ms Verzögerung zu einem Ergebnis führt (kaum bzw. gar nicht spürbar)
2. das kontinuierliche Drücken überhaupt nichts bewirkt und erst beim Loslassen mit der o.g. Verzögerung das Plugin geladen wird.

Alternativ speicherst Du deine Plugins zwischen.
Danke ist ne gute Idee
1 Sekunde für jedes Plugin sollte ausreichen.

Frohes Weihnachtsfest..

gruss
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: FastSwitch

  Alt 22. Dez 2013, 12:41
Eine Sekunde ist aber happig. Wenn der Ladevorgang zu lange dauert, dann müssen sie vorher geladen werden (imho). Aber ich hab ja die Anwendung nicht vor mir, kann das also nur aus der Ferne (grob) beurteilen.

Du machst das schon.

Frohes Fest zurück.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: FastSwitch

  Alt 25. Dez 2013, 04:07
Eine Sekunde ist aber happig. Wenn der Ladevorgang zu lange dauert, dann müssen sie vorher geladen werden (imho). Aber ich hab ja die Anwendung nicht vor mir, kann das also nur aus der Ferne (grob) beurteilen.

Du machst das schon.

Frohes Fest zurück.
Wir haben es nun so gelöst..
Ob das elegant ist mag dahingestellt sein

Code:
        case Action.ActionType.ACTION_PAGE_UP:
          {
            var timeSpamVerif = DateTime.Now - _lastAction;
            if (timeSpamVerif.TotalSeconds >= 2)
            {
              _validAction = true;
            }
            else
            {
              _validAction = false;
            }
            if (FullScreen && CurrentAudioStream != 0)
            {
              Log.Debug("BASS: Switch to Previous Vis");
              if (_validAction)
              {
                _lastAction = DateTime.Now;
                VizManager.GetPrevVis();
              }
            }
            break;
          }

        case Action.ActionType.ACTION_PAGE_DOWN:
          {
            var timeSpamVerif = DateTime.Now - _lastAction;
            if (timeSpamVerif.TotalSeconds >= 2)
            {
              _validAction = true;
            }
            else
            {
              _validAction = false;
            }
            if (FullScreen && CurrentAudioStream != 0)
            {
              Log.Info("BASS: Switch to Next Vis");
              if (_validAction)
              {
                _lastAction = DateTime.Now;
                VizManager.GetNextVis();
              }
            }
            break;
          }
wobei die 2 Sek. nicht variabel sind was wiederrum einen Deadlock auslösen könnte
wenn die Plugins zu schnell geändert werden da ich nur einen Thread zur Verfügung stelle.
Ist also Zeit abhängig und von PC zu PC unterschiedlich.
Hmmmm...

In der IDE funktioniert es mit 1 Sekunde als Eigenständige Ausführung dann nicht mehr deshalb 2 Sek.
Aber auch das könnte zu Problemen führen.
Was gäbe es da noch für eine Möglichkeit.

Timer wollen die nicht warum auch immer...

Und auf Änderung bzw. addieren eines KeyUp Events wurde gemeckert.
Was eigentlich die eleganteste und richtige Lösung wäre da man dann gezwungen wäre diesen erst loszulassen
damit das nächste Plugin geladen wird.

gruss

Geändert von EWeiss (25. Dez 2013 um 04:35 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

AW: FastSwitch

  Alt 25. Dez 2013, 04:23
Wie werden die Plugins denn geladen und entladen? Wenn jedes Plugin einfach eine zentrale Finalize-Routine hätte, die man vom Programm aus aufrufen kann, dann würde das Programn ja automatisch so lange blockieren, bis alles sauber aufgeräumt ist.

Bei statischen Wartezeiten bin ich immer sehr skeptisch... in 5 Jahren bremst die Konstante das Programm auf aktuellen Rechnern dann unnötig aus. Gleichzeitig kann es durch Paging usw. immer mal vorkommen, dass der Prozess doch länger braucht.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: FastSwitch

  Alt 25. Dez 2013, 04:29
Zitat:
Wenn jedes Plugin einfach eine zentrale Finalize-Routine hätte
Die habe ich ja BassVis_Quit.. bzw. BassVis_Free
Aber das nutzt überhaupt nichts wenn 1000 mal in einer sekunde versucht wird ein neues Plugin zu starten.

Wenn der Thread sich beendet werden gleichzeitig 100 neu aufgerufen..
Ich weis nicht wie ich das verhindern kann innerhalb meiner DLL.

Zitat:
Bei statischen Wartezeiten bin ich immer sehr skeptisch... in 5 Jahren bremst die Konstante das Programm auf aktuellen Rechnern dann unnötig aus. Gleichzeitig kann es durch Paging usw. immer mal vorkommen, dass der Prozess doch länger braucht.
Die weigern sich halt einen Eintrag für die Wartezeit in den Konfigurations Dialog einzutragen
mit dem Argument um so mehr Einstellungen eingefügt würden um so schlechter käme der User damit zurecht.
Für mich hört sich das an als würden die User für Dumm erklärt.

gruss

Geändert von EWeiss (25. Dez 2013 um 04:48 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

AW: FastSwitch

  Alt 25. Dez 2013, 04:45
Achso, dann verstehe ich das. Dann müsste es doch aber genügen, vor dem Aufruf der Finalize-Routine ein globales Flag auf False zu setzen und hinterher auf True. Und wenn die "Nächstes Plugin laden"-Methode aufgerufen wird, während das Flag False ist, dann bricht die Methode ab (oder wartet, bis das Flag wieder True ist). Natürlich noch threadsafe, das ganze. Läuft dann eigentlich auf ganz einfaches, normales Locking hinaus. Übersehe ich etwas?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 5  1 23     Letzte »    


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