![]() |
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 |
Re: Mehrere UploadThreads auf einen Buttonklick beenden (SOF
Hallo!
grundsätzlich sagst du dem Thread folgendes:
Delphi-Quellcode:
Im Thread selbst kannst du dann auf .Terminated = true
with myThread do
begin Terminate; WaitFor; // bei OnCloseQuery setzen end; 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 |
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:
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.
procedure TUploadThread.Execute;
begin if not (Terminated) then begin DataStream := TIdMultiPartFormDataStream.Create; [...] sResult := Http.Post(sURL, DataStream); end; Terminate; end; 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 04:42 Uhr. |
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