AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Threads: Eingeschaften von suspended Threads schreiben?
Thema durchsuchen
Ansicht
Themen-Optionen

Threads: Eingeschaften von suspended Threads schreiben?

Ein Thema von Dani · begonnen am 9. Feb 2005 · letzter Beitrag vom 9. Feb 2005
Antwort Antwort
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Threads: Eingeschaften von suspended Threads schreiben?

  Alt 9. Feb 2005, 14:47
Hi DPler!

Ich hab hier einen Thread, der mit IdHTTP Dateien von Webservern runterlädt. Man soll jetzt die Möglichkeit haben, einzelne Datei-Downloads abzubrechen, ohne dass der Thread beendet wird. Die Execute Methode der Threads sieht in etwa so aus:

Delphi-Quellcode:
procedure TDownloadThread.Execute;
begin
  while (not terminated) do
   try
    NoJobsLeft := false;
    Synchronize(GetAJob);
    If NoJobsLeft then break;
    FAbortFile := false;
    DownloadFile; <=== nächste Abort-Möglichkeit im OnWork von IdHTTP
   except
    {unbehandelte Exception}
   end;
end;

procedure TDownloadThread.OnWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
var i: Integer;
begin
 If (Terminated OR FAbortFile) then
  begin
   HTTP.Disconnect;
   raise EAbort.Create('Download aborted');
  end;
end;
Die Downloads werden in einer Listview (vsReport) dargestellt, per Rechtsklick öffnet sich ein Popup-Menü, in dem man u.a. den Abbruch wählen kann. Nun zum eigentlichen Problem . Für die Zeit, in der das Popup-Menü offen ist, müssen die selektierten Threads pausiert werden (=> TThread.Suspend). Soweit kein Problem.

Der User wählt "Download abbrechen", die FAbortFile-Variable wird auf true gesetzt, die Threads fortgesetzt (TThread.Resume) und das Popup-Menü geschlossen.

Und dann knallts... alle möglichen Fehlermeldungen klappen auf, von Zugriffsverletzungen über ungültige Zeigeroperationen bis hin zu ner "Priviligierten Anweisung". Hab auch schon versucht, alles in CriticalSections zu packen, hat aber auch nichts geändert.

Ohne Suspend und anschließenden Resume funktionierts. Darf man auf die Eigenschaften eines Suspended Threads nicht schreibend zugreifen?

Gruß,
Dani

Edit: Kommando zurück, ohne Suspend kommen die Zugriffsverletzungen auch. Vielleicht gibts ein Problem mit dem Zugriff auf TListItem.Data (wo eine Referenz auf den zugehörigen Thread gespeichert ist. Mal schauen...
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Threads: Eingeschaften von suspended Threads schreiben?

  Alt 9. Feb 2005, 23:19
Lustig, hab gerade sämtlichen Code, der mit Thread-Zugriffen zu tun hat, auskommentiert. Die Fehler bleiben. Shoot me. Könnte sich ein Mod erbarmen und den Thread bitte löschen ? *schäm*

Edit: Der Fehler hat seltsamerweise etwas mit der Freigabe einer stinknormalen TList zu tun...
Edit#2: Aha, das Formuar versucht anscheinend beim schließen die bereits freigegebene TList nochmal freizugeben. Mit FreeAndNil funktionierts wunderbar. Very Strange.
Dani H.
At Least I Can Say I Tried
  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 03:49 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