AGB  ·  Datenschutz  ·  Impressum  







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

Thread 100% beendet?

Ein Thema von EWeiss · begonnen am 6. Aug 2011 · letzter Beitrag vom 25. Aug 2011
 
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Thread 100% beendet?

  Alt 6. Aug 2011, 10:57
Zitat:
dass du Threadsynchronisierung im Zusammenspiel mit WaitFor benutzt
Nein verwende ich nicht.
Es läuft auch nur ein Thread bzw. nur ein Plugin zur gleichen zeit.

Zitat:
schlicht hängt und der Quelltext danach gar nicht mehr ausgeführt wird.
Wie soll ich das prüfen ?
Setze ich nen breakpoint nach dem der Thread beendet wurde habe ich das problem nie.

Zitat:
sondern das vor dessen Aufruf alle Threads in der DLL beendet sind...
Hmm ich mache nichts anderes.

Ich sende eine Message
PostThreadMessage(DriveThreadId, WM_QUIT, 0, 0); Welche den aktuellen Thread beendet.
Danach rufe ich meine unload procedure auf die den hier gesendeten Quelltext enthält.

siehe Post 1.

danach setze ich die Variablen auf default werte.


Delphi-Quellcode:
   DriveThreadId := 0;
   WindowEmbed := 0;
   BassVis1.VisWinHandle := 0;
   VisClientHandle := 0;

   SetWindowLong(MainWinHandle, GWL_WNDPROC, LongInt(MainWindowProc));
   BassWinampVisFree := True;

   DebugString('BassVis.dll', 'BASSVIS_WinampThread Destroy', 'EndByThread = ' + booltostr(EndByThread));
   DebugString('BassVis.dll', 'BASSVIS_WinampThread Destroy', 'Rendering = ' + booltostr(GoRendering));
   DebugString('BassVis.dll', 'BASSVIS_WinampThread Destroy', 'VisUnload = ' + booltostr(VisualizerUnloading));
   DebugString('BassVis.dll', 'BASSVIS_WinampThread Destroy', 'VisFree = ' + booltostr(BassWinampVisFree));
   DebugString('BassVis.dll', 'BASSVIS_WinampThread Destroy', 'End');

   DebugStringStop('BASSVIS_WinampThread', 'Destroy');

   Result := 0;
   EndThread(0);
So!
Während das alles geschieht startet aber schon der neue Thread. bzw.. ist schon am laufen.

Mein Problem ist dann wie schon gesagt das wenn zu schnell in der Liste rumgeklickt wird.
Die Anwendung hängt wenn plötzlich zwei Threads gleichzeitig laufen und der erstet nicht beendet wurde.
Das kann vorkommen aber nicht immer.

Und das ist mein Problem.

PS:
Ich muss also irgendwie 100% sicher sein das dass alte Plugin entladen wurde.
bzw. der alte Thread.
Oder?

Wie kann ich das also verhindern das der neue starte bevor nicht alles auf 0 steht.

EDIT:
Ich erstelle schon eine critical section (auch wenn ich nicht genau weiss was das teil macht)

LockFlag := TCriticalSection.Create;
Allerdings nur für meinen RenderThread und protected (sind schon mehr Threads allerdings nur gültig für ein Plugin)
So wie ich aber gelesen habe soll man nicht mehrere verwenden ..


gruss

Geändert von EWeiss ( 6. Aug 2011 um 11:55 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 19:09 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