AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit Dll & Threads

Ein Thema von Assertor · begonnen am 21. Jan 2010 · letzter Beitrag vom 21. Jan 2010
 
Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#1

Problem mit Dll & Threads

  Alt 21. Jan 2010, 18:41
Hallo DPler,

jetzt brauche ich mal nach langem mal wieder selbst Denkhilfe & Brainstorming:

Ich habe hier ein DLL Projekt liegen (Delphi 2010). Die Exporte dafür müssen so bleiben. Intern verwendet die DLL Threads und bei bestimmten Vorgängen zeigt diese VCL Forms. Technisch gesehen soweit, so schlecht.

Jetzt gibt es beim Aufräumen des ThreadPool einen schönen DeadLock. Die Stelle ist

Delphi-Quellcode:
for i := 0 to Length(FThreadPool) - 1 do
begin
  // FThreadPool[i].FreeOnTerminate := True; // soft shutdown
  FThreadPool[i].Terminate;
  FThreadPool[i].WaitFor; // <- freezes
  FThreadPool[i].Free; // <- freezes
end;
Die oben markierten Stellen führen zum DeadLock, aber nur wenn der Pool in der Finalisierung einer Unit aufgeräumt wird. Ich sehe da verschiedene Probleme mit Threads und DLLs im Bereich Finalisierung.

Was haltet Ihr davon nun ein Semaphore/Event nach Execute zu nutzen, um im Destruktor zu warten (.WaitFor) bis dies eingetreten ist, um danach FreeOnTerminate zu setzten? Also sozusagen von Serialized Shutdown auf Soft-Shutdown umstellen?

Ohne Soft-Shutdown gibt es den MessageQueue DeadLock, mit laufe ich Gefahr das die Finalisierung der Units wie z.B. Classes vor Ende der Threads bereits durchlaufen wurde... Deswegen ein Event. Irgendwie "smellt" der Code, aber das ist das sauberste was mir einfällt bei Beibehaltung der Exporte.

Zweites Problem, gleicher Zusammenhand:

Die Thread zeigen VCL Forms, also müssten diese Synchronisiert werden. Aber womit Mir ist bekannt, das es da Probleme geben kann mit Threads in DLLs und Synchronize. Threads deswegen, da Hintergrundprüfungen und TCP/IP Übertragungen vorgenommen werden. Also etwas, was nicht im Mainthread-Context laufen sollte.

Vorschläge? Ideen?

Gruß Assertor

Edit1: Offene Frage draus gemacht
Edit2: Delphi Version
Frederik
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:41 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