Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Thread hart beenden (https://www.delphipraxis.net/67366-thread-hart-beenden.html)

Yamato 13. Apr 2006 17:42


Thread hart beenden
 
Hallo,

Folgendes Problem:
Eine laufende Berechnung soll durch einen Buttonklick beendet werden. Dazu wird bei mir mit

Delphi-Quellcode:
TerminateThread(CalcThread.Handle, 0);
der Berechnungs-Thread beendet. Das hat aber einige Nebenwirkungen: Es kann vorkommen, daß danach die Anwendung einfriert oder eine Exception auftritt. Wo liegt also das Problem und wie kann man es besser lösen? (Der Thread greift nur auf interne Daten zu, kann also problemlos beendet werden)

Zweites Problem:
Während der Berechnung soll der Mauszeiger in eine Sanduhr verwandelt werden (außer, falls sich der Zeiger über dem Abbruch-Button befindet). Dazu müßte ich aber bei jeder Komponente auf dem Formular die Cursor-Eigenschaft setzen - was viel zu kompliziert ist. Geht auch das schneller zu lösen?

Danke im Voraus

(Sorry, erst jetzt gesehen, daß ich im falschen Forum gepostet habe. Wie kann man das nachträglich ändern?)

ste_ett 13. Apr 2006 18:12

Re: Thread hart beenden
 
Du könntest zwischen den einzelnen Schritten in der Execute-Prozedur deiner Thread-Klasse solche Abfragen einbauen:

Delphi-Quellcode:
// ...
  if (not Self.Terminated) then
  begin
//  Rechnen
  end;
//...
Damit würde an der Stelle abggebrochen, wenn du den Thread beendest.

Für das Beende reicht dann ein einfaches

Delphi-Quellcode:
  NameDerThreadklassen-Instanz.Terminate;
- edit -

Für das zweite Problem bitte einen extra Thread aufmachen.
Wenn man was über Forms und Cursor sucht, erwartet man sowas nicht in einem Thread mit dem Titel "Thread hart beenden". :)


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