AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Thread.suspend gesetzt und trotzdem Zugriffsfehler
Thema durchsuchen
Ansicht
Themen-Optionen

Thread.suspend gesetzt und trotzdem Zugriffsfehler

Ein Thema von Pfoto · begonnen am 12. Nov 2005 · letzter Beitrag vom 12. Nov 2005
Antwort Antwort
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#1

Thread.suspend gesetzt und trotzdem Zugriffsfehler

  Alt 12. Nov 2005, 14:36
zusammen,

ich habe aktuell ein Problem das ich nicht in den Griff bekomme:
Ein Thread bearbeitet im Hintergrund Bilder und speichert diese als Thumbnails ab.
Im Vordergrund greife ich auf diese Thumbnails zu.

Ich ging davon aus, dass ich mit Thread.suspend den Thread sofort anhalten könne, um dann im Vordergrund das Thumbnail zu laden.
Also etwa so:
Delphi-Quellcode:
Thread.suspend;
// Im Vordergrund Thumbnail laden
Image1.Picture.LoadFromFile(Dateiname);
// Dann im Hintergrund weiter neue Thumbnails erstellen etc...
Thread.resume;
Trotzdem kommt eine Fehlermeldung, dass bereits ein Zugriff vorliegt. Also ist der Thread doch noch aktiv? Hält der Thread mit suspend nicht sofort und vollständig an oder führt er noch die aktuelle Methode zuende aus?

Das Speichern des Thumbnails im Thread mit Synchronize durchführen, wäre doch auch ein Flaschenhals und würde die Anwendung andauernd abbremsen.

Vielleicht gibt es ja auch etwas sinnvolleres, was ich machen sollte.
Was meint ihr?


Dank und Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#2

Re: Thread.suspend gesetzt und trotzdem Zugriffsfehler

  Alt 12. Nov 2005, 14:42
Habe ich es richtig verstanden, dass du in einem Thread Bilddateien erstellst und diese im Hauptthread wieder lädst? Wäre es da nicht schlauer, das Bitmap von Thread zu VCL-Thread zu übergeben?

Zu dem Problem an sich: Der Thread scheint wohl die Datei gerade geöffnet zu haben, wenn du ihn anhälst.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Thread.suspend gesetzt und trotzdem Zugriffsfehler

  Alt 12. Nov 2005, 14:45
Erstmal unabhängig vom Suspend, was genau macht denn der Thread?
Ich meine wenn du die Datei öffnest und damit implizit eine Sperre setzt, dann wird diese Sperre doch erst gelöst, wenn der Thread sie wieder freigibt (wahrscheinlich erst wenn er beendet wird). Wenn du also den Thread anhälst, dann arbeitet er zwar nicht auf dem Bild, aber die Sperre bleibt erhalten.
Also führt ein Laden zu deinem Fehler bis die Sperre nicht mehr existiert.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Pfoto

Registriert seit: 26. Aug 2005
Ort: Daun
541 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Thread.suspend gesetzt und trotzdem Zugriffsfehler

  Alt 12. Nov 2005, 15:23
Zitat von Khabarakh:
Wäre es da nicht schlauer, das Bitmap von Thread zu VCL-Thread zu übergeben?
Im Hintergrund werden Bilddateien einer Datenbank der Reihe nach abgearbeitet. (Die Bilddateien werden aber nicht in der DB gespeichert)
Es ist also nicht gesagt, dass die gerade bearbeitete Datei auch im Hauptprogramm angezeigt werden muss, sondern nur wenn der User zufällig diese in seiner Liste scrollt.

Der Thread läuft praktisch permanent im Hintergrund und wird nicht erst bei Bedarf erzeugt. Die Sperre (also das Anhalten) wird deswegen im Hauptprogramm erzeugt und sofort nach dem laden des kleinen Thumbnails in die Liste wieder aufgehoben.

Es ist auch nicht so, dass das Programm dauernd abstürzt, sondern (scheinbar) nur exakt wenn sich Lade- und Speichervorgang überkreuzen (was ich ja verhindern wollte)


Gruß
Pfoto
Jürgen Höfs
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Thread.suspend gesetzt und trotzdem Zugriffsfehler

  Alt 12. Nov 2005, 16:58
Du solltest dies über die Synchronize Methode von TThread regeln.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 17:42 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