Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Exception bei Thread-Verwendung (https://www.delphipraxis.net/94007-exception-bei-thread-verwendung.html)

ManuMF 17. Jun 2007 10:15

Re: Exception bei Thread-Verwendung
 
Jetzt hab ichs verstanden :-D

OK, dann probiere ich es mal so.
Dann muss ich nur noch ein wenig umschreiben, da vor dem Post noch die Bars auf 0 gestellt werden etc., das muss dann wohl auch noch in eine synchronisierte Prozedur... oder kann ich quasi im Thread einen Bereich als synchronisiert bestimmen? Ach so, und kann ich im Thread auf globale Variablen zugreifen?

[Edit]
Stopp, das ganze funktioniert nicht. Ich muss per ButtonClick das IdHTTP stoppen können (.disconnect). Das geht aber natürlich nicht, wenn ich es dynamisch im Thread erstelle. :wall:
[/edit]

alzaimar 18. Jun 2007 07:52

Re: Exception bei Thread-Verwendung
 
Zitat:

Zitat von ManuMF
[Edit]
Stopp, das ganze funktioniert nicht. Ich muss per ButtonClick das IdHTTP stoppen können (.disconnect). Das geht aber natürlich nicht, wenn ich es dynamisch im Thread erstelle. :wall:
[/edit]

Doch. Du musst doch nur das 'Stopp' als Methode im Thread bereitstellen.

ManuMF 18. Jun 2007 07:58

Re: Exception bei Thread-Verwendung
 
Also z.B. MyThread.StopUpload und das im ButtonClick aufrufen? :gruebel:

alzaimar 18. Jun 2007 08:02

Re: Exception bei Thread-Verwendung
 
Jupp. Probier's. In der StoppHttp-Methode solltest Du mit etwas Glück nur Disconnect aufrufen.

ManuMF 18. Jun 2007 14:28

Re: Exception bei Thread-Verwendung
 
Ja, genau so hab ich es vorher gemacht.

Ich habe das Ganze nun umgesetzt. Es besteht hier aber weiter das Problem, dass das Programm nur regiaert, wenn ich im (synchronisierten) work-Update-Event ProccessMessages ausführe, sonst gar nicht. Ich habe das so wie oben vorgeschlagen angelegt, also im onWork wird eine Prozedur synchronisiert aufgerufen, die die Progresbars setzt.

Liegt es vielleicht daran, dass ich das Uploaden als Funktion anlege, da ich wissen muss, ob er fehlgeschlagen ist? Hier ein bisschen Code:
Delphi-Quellcode:
function TUploadThread.DoUpload(URL: String; Stream: TStream; RCT: String; out AW: String): Boolean;
begin
  IdHTTPC.Request.ContentType := RCT;

  result := true;

  try
    AW := IdHTTPC.Post(URL, Stream);
  except
    result := false;
  end;
end;

// Aufruf in einer "normalen" Prozedur außerhalb des Threads

  if (UploadThread.DoUpload(DURL, Stream, RCT, AW)) then
    LogFeld.Items.Add('  Erfolgreich.')
  else
    [Fehlerbehandlung]
ansonsten wenigstens keine AVs oder sonstige Probleme :-D

alzaimar 18. Jun 2007 15:04

Re: Exception bei Thread-Verwendung
 
Du rufst doch gar keinen Thread auf!

Die Arbeit des Threads wird durch seine Execute-Methode definiert. Dort, und nur dort arbeitet der Thread im Hintergrund.

ManuMF 18. Jun 2007 16:15

Re: Exception bei Thread-Verwendung
 
Ach so. Dann bringt aber der Vorschlag von C.Schoch bzw. DGL-luke nichts, oder? :wiejetzt:

C.Schoch 18. Jun 2007 20:01

Re: Exception bei Thread-Verwendung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
Klar bringen unsere Vorschläge etwas, du solltest den Thread nur auch mal anschmeißen und nicht eine im Thread deklarierte Funktion aus dem Haupthread aufrufen.

Ich hab mal auf die schnelle ne Demo zusammengebaut allerdings einen Download (Upload ist aber gleich zu implementieren), Fehlerbehandlung usw sind noch nachzurüsten.

Um die Meldung "Fehler" zu provozieren einfach das Programm mir der Firewall blockieren.

Edit: Vieleicht solltest du dich erstmal mit den Grundlagen von Threads vertraut machen z.B. mit Luckies Thread Tutorial (Threads_mit_Delphi.pdf)

ManuMF 18. Jun 2007 22:11

Re: Exception bei Thread-Verwendung
 
(Der Fehler liegt wohl an einem Verständnisproblem. Soweit wie möglich bin ich das Tutorial nämlich schon durchgegangen.)

Aber ich pendele hier ständig von einem Problem zum nächsten: Dein Beispiel ist super (danke dafür!), aber es berücksichtigt wieder nicht, dass ich das IdHTTP per Buttonclick stoppen können muss. Außerdem geschieht der Upload in einer Schleife. Was muss ich da tun? Den Thread jedes mal wieder neu erzeugen und starten?

C.Schoch 19. Jun 2007 18:27

Re: Exception bei Thread-Verwendung
 
Hi,
Ich will dir ja nicht die Lösung auf dem Silbertablett präsentieren, du willst doch auch was lernen oder?

Das mit dem Abbruch ist einfach, hierfür besitzt ein Thread Objekt die Eigenschaft Terminated.

Den Thread würde ich nicht jedes mal neu starten. Ein Ansatz wäre dem Thread eine Liste mit Urls zu übergeben, die er dann abarbeitet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:56 Uhr.
Seite 3 von 4     123 4      

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