AGB  ·  Datenschutz  ·  Impressum  







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

Thread Queue probleme

Ein Thema von EWeiss · begonnen am 1. Jun 2018 · letzter Beitrag vom 3. Jun 2018
Antwort Antwort
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.687 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Thread Queue probleme

  Alt 2. Jun 2018, 13:13
Hast Du schon ermittelt, welche Speicherfreigabe die Exception auslöst? Wenn ja, mal im ensprechenden Destructor einen Breakpoint setzen und schauen, von wo und wie oft er aufgerufen wurde.
Thomas Mueller
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Thread Queue probleme

  Alt 2. Jun 2018, 13:57
Hast Du schon ermittelt, welche Speicherfreigabe die Exception auslöst? Wenn ja, mal im ensprechenden Destructor einen Breakpoint setzen und schauen, von wo und wie oft er aufgerufen wurde.
Keine Speicherfreigabe löst den Fehler aus.
Sondern der nächste darauffolgende zugriff auf TAudioVolume.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Thread Queue probleme

  Alt 2. Jun 2018, 18:14
Ich liege hundert pro eh falsch aber gesagt haben mag ichs mal.
Setze doch mal einen BP vor Zeile FOnSessionStateEvent(self, NewState); und stepp dich da mal rein ob das alles seine Richtigkeit hat. Noch kommt mir das Self komisch vor, aber ich kann mich, wie so oft bei Dir, total irren.

Und verträgt Result.IsSystemSoundsSession :-1; einen negativen Wert ?

Zitat:
tmpStr := ExtractFileExt(FAudioSessionInfo.DisplayName); \\ <<<<<<< Hier kracht es
existiert denn FAudioSessionInfo.DisplayName zu diesem Zeitpunkt?
Wegen Result.DisplayName := '';
Lass Dir doch an dieser Stelle ne MessageBox anzeigen was du da so für Daten im Speicher hast.
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 2. Jun 2018 um 18:27 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Thread Queue probleme

  Alt 2. Jun 2018, 20:41
bekomme es nicht geregelt. egal.
Habe noch andere Projekte.

gruss

Geändert von EWeiss ( 2. Jun 2018 um 23:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Thread Queue probleme

  Alt 3. Jun 2018, 17:39
Wenn du doch nochmal reinschauen willst: Was sagt denn der Debugger zu den Werten von Self , FAudioSessionInfo , etc? Steht da unter Umständen vielleicht schon "Müll" drinnen? Nur mit statischen Informationen ist es hier leider recht schwer die Fehlerquelle zu ermitteln.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Thread Queue probleme

  Alt 3. Jun 2018, 17:42
Wenn du doch nochmal reinschauen willst: Was sagt denn der Debugger zu den Werten von Self , FAudioSessionInfo , etc? Steht da unter Umständen vielleicht schon "Müll" drinnen? Nur mit statischen Informationen ist es hier leider recht schwer die Fehlerquelle zu ermitteln.
Nein self ist die TAudioVolume Classe da steht kein Müll drin.

self und AudioSessionInfo siehe Anhang.
Ist schade aber so kann ich das Projekt nicht fertig stellen. sorry.
Ich habe zu wenig Erfahrung mit Threads so das ich den Fehler selber analysieren könnte.
Der Debugger ist in dem Fall nicht Hilfreich.

Ganz umsonst war das Projekt nicht habe 1>2 Fehler in meiner Library beheben können und eine neue Funktion addiert um zu vor erstellte
Kombinierte Objekte in einem rutsch zu löschen.

Delphi-Quellcode:
// Alle Objekte die mit diesen verbunden sind löschen
for I := 0 to Length(AudioVolumeArr) - 1 do
  gSprSession.GD_DeleteLinkedObject(succ(ID_BVOLUME) + i); // neue Funktion
EDIT:
Habe meine Funktion nochmal optimiert ändert aber nichts an meinem Pointer Problem doch das hier (AudioVolumeArr[M].Free;)
Delphi-Quellcode:
procedure TMainClass.SessionStateEvent(Sender: TCustomAudioVolume; NewState: integer);
var
  IntI, K, M: integer;
  ProcId: DWORD;
  vProcList: TProcesses;
  bFound: BOOL;
begin

  bFound := false;

  for IntI := 0 to Length(AudioVolumeArr) - 1 do
  begin
    if AudioVolumeArr[IntI] = Sender then
    begin
      ShowMessage(AudioVolumeArr[IntI].AudioSessionInfo(IntI).DisplayName + #13#10 +
        'Index ' + IntToStr(IntI) + ' hat jetzt State ' + IntToStr(NewState));

      ProcId := StrToInt(AudioVolumeArr[IntI].AudioSessionInfo(IntI).ProcessID);

      if (ProcId <> 0) and (NewState = 0) then
      begin
        // ProcList initialisieren
        vProcList := TProcesses.Create;
        // Prozesse einlesen
        vProcList.ReadSystem;
        // prüfen ob aktiver prozess existiert
        for K := 0 to vProcList.Count - 1 do
          if vProcList[K].ID = ProcId then
          begin
            bFound := true;
            // Raus hier
            break;
          end;

        if not bFound then
        begin
          // Timer deaktivieren
          KillTimer(HSprMaster, ID_MRENDER);
          // Alle Objekte die mit diesen verbunden sind löschen
          for M := 0 to Length(AudioVolumeArr) - 1 do
          begin
            gSprSession.GD_DeleteLinkedObject(succ(ID_BVOLUME) + M);
            // TAudioVolume freigeben
            AudioVolumeArr[M].Free;
          end;
          // Array löschen
          SetLength(AudioVolumeArr, 0);
          // Session erstellen
          CreateSession;
          // Window aktualisieren
          gSprSession.GI_UpdateWindow(HSprSession, false);
          // Timer aktivieren
          SetTimer(HSprMaster, ID_MRENDER, 60, nil);
        end;
        // Prozessliste löschen
        vProcList.Clear;
        // Prozessliste freigeben
        FreeAndNil(vProcList);
      end;
    end;
  end;
end;
gruss

Geändert von EWeiss (11. Jul 2019 um 15:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#7

AW: Thread Queue probleme

  Alt 3. Jun 2018, 19:57
Ahchso, ne ich meinte eigentlich das Self innerhalb von TAudioVolume.AudioSessionInfo . Also dann, wenn es kracht. Meine Vermutung war halt, dass hier schon irgendwelche Zeiger (vlt. sogar Self ) ins leere laufen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  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 19:21 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