AGB  ·  Datenschutz  ·  Impressum  







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

Wieso bekomme ich hier einen Deadlock?

Ein Thema von Zacherl · begonnen am 24. Mai 2010 · letzter Beitrag vom 26. Mai 2010
 
Benutzerbild von Zacherl
Zacherl

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

Wieso bekomme ich hier einen Deadlock?

  Alt 24. Mai 2010, 18:59
Hey,

ich habe hier ein etwas anspruchsvolleres Problem: Ich habe einen Thread, welcher praktisch dauerhaft (mit Sleep(10) unterbrochen) auf eine ThreadList zugreift (LockList und UnlockList in jedem Zyklus). Nun habe ich eine Benutzerfunktion, die von der VCL Oberfläche aus ebenfalls auf die ThreadList zugreift. Dies geschieht sehr selten.
Der Thread selbst ruft bei jedem Durchgang mehrmals Ereignissfunktionen, in diesem Falle OnProgress, auf.

Soweit funktioniert alles wunderbar. Die Synchronisation der Threads arbeitet gut und durch das Sleep findet auch nach jedem Zyklus ein Context Switch statt. Jetzt möchte ich aber im OnProgress Event eine Fortschrittsanzeige aktualisieren. Da das Event im Context des Threads läuft, muss ich hier mit der VCL synchronisieren. Hierzu benutze ich der Einfachheit halber die AsyncCalls Unit (allerdings auch mit Synchronize() des Threads getestet).

Okay der Thread läuft nun und der Fortschritt wird auch wunderbar angezeigt. ABER: Rufe ich jetzt die Benutzerfunktion auf, kommt es zum Deadlock, weil LockList komischerweise bis in alle Ewigkeiten auf die Synchronisation wartet. Dieser Fehler tritt wie gesagt nur auf, wenn ich im Event mit der VCL synchronisiere.

Momentan habe ich das Problem jetzt so behoben, dass ich vor Aufruf des Events aus dem Thread heraus UnlockList aufrufe und nach dem Event direkt wieder LockList. Das funktioniert zwar, mich würde aber trotzdem interessieren warum es anders zum Deadlock kommt.

Viele Grüße
Zacherl
  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:57 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