Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Mehrere UploadThreads auf einen Buttonklick beenden (SOFORT) (https://www.delphipraxis.net/85716-mehrere-uploadthreads-auf-einen-buttonklick-beenden-sofort.html)

7down 3. Feb 2007 21:50


Mehrere UploadThreads auf einen Buttonklick beenden (SOFORT)
 
Hi ihr,

ich habe mehrere Threads die nacheinander ausgeführt werden. Alle beeinhalten einen IdHttp und laden jeweils eine Datei hoch.
Jetz möchte ich, wenn der User auf einen Stop-Button klickt, alle Threads terminated werden, dh:
1. Der Thread der gerade läuft soll abgebrochen werden (SOFORT)
2. Alle Threads die normalerweise nach dem aktuelle Thread dran wären, sollen beendet werden, dass sie garnicht erst zum Upload komme.

Wie realisiere ich sowas?

Danke,
7down

Pfoto 3. Feb 2007 22:08

Re: Mehrere UploadThreads auf einen Buttonklick beenden (SOF
 
Hallo!

grundsätzlich sagst du dem Thread folgendes:

Delphi-Quellcode:
with myThread do
begin
  Terminate;
  WaitFor; // bei OnCloseQuery setzen
end;
Im Thread selbst kannst du dann auf .Terminated = true
prüfen -- hier mit den vorgesehenen Methoden die
Upload-Routine ansprechen und ein "Cancel" auslösen.

Das Waitfor ist sinnvoll, um zu verhindern, dass das Programm
beendet wird, während ein Thread noch im Hintergrund
weiterläuft und vielleicht gerade versucht, seine Routinen
zu beenden -- denn ein *sofort* ist halt immer davon
abhängig, wie schnell auch diese Routinen beendet werden
können.

Wenn du die Threads in einem Array baust, kannst du
sie mit einer simplen Schleife auch schnell einzeln
durchgehen und ein "Cancel" befehlen.

Im Forum gibt es dazu auch Quellcode...


Gruß
Pfoto

7down 3. Feb 2007 22:42

Re: Mehrere UploadThreads auf einen Buttonklick beenden (SOF
 
Hi, danke für deine Antwort, aber war nicht genau das wonach ich gesucht hatte, ich versuchs mal genauer zu beschreiben:
Also ich hab mehrere Threads, alle Suspended.
Dann kümmert sich mein Prog darum, dass alle Threads der Reihe nach durchgearbeitet werden. Das funktioniert auch alles, das Problem liegt nur beim stoppen.
Delphi-Quellcode:
procedure TUploadThread.Execute;
begin
  if not (Terminated) then begin
    DataStream := TIdMultiPartFormDataStream.Create;
    [...]    
    sResult := Http.Post(sURL, DataStream);
  end;
  Terminate;
end;
Das ist der Execute Code dieser einzelnen Threads. Die Threads die nach dem Stoppen noch nicht dran waren, werden durch die If-Abfrage von vornerein übersprungen, das klappt also auch.
Das einzige Problem was bleibt: der Thread der gerade am Uploaden ist.

Wie kann ich den relaitv zeitgleich mit dem Buttonklick terminieren? Ich habe schon versucht im OnIdHttpWork zu prüfen obs Terminated ist, und wenn ja, dann den IdHttp zu disconnecten, aber das hat leider nur zu ner Access Violation geführt.

Wäre euch sehr dankbar wenn ihr mir sagen könnt, wie ich den derzeit uploadenden Thread beenden kann.+


Danke
7down


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 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