Forum: Programmieren allgemein
by stahli,
25. Okt 2016
Ich hatte noch das FreeOnTerminate vergessen, so dass der Thread nach Beendigung nicht freigegeben wurde:
constructor TArbeiterThread.Create(aMinValue, aMaxValue: Integer; aProgressInitEvent: TProgressInitEvent;
aProgressStepEvent: TProgressStepEvent; aProgressCloseEvent: TProgressCloseEvent);
begin
fMinValue := aMinValue;
fMaxValue := aMaxValue;
fProgressInitEvent :=...
Forum: Programmieren allgemein
by stahli,
25. Okt 2016
So würde ich es machen (XE3)...
Mit Events ist es noch besser strukturiert als mit Übergabe des Formulars.
Nachrichten verschicken ginge natürlich auch, aber das habe ich schon Jahre nicht mehr gemacht. :oops:
Forum: Programmieren allgemein
by stahli,
25. Okt 2016
Ich wollte gerade mal ein Beispiel mit einem Event machen.
Das Projekt lässt sich aber mit meinem XE3 nicht kompilieren - bricht einfach hart ab.
Welches Delphi nutzt Du?
Forum: Programmieren allgemein
by stahli,
25. Okt 2016
Schaue ich mir heute Abend mal an...
Forum: Programmieren allgemein
by stahli,
25. Okt 2016
@Jim, ja, Dich meinte ich.
In welcher For-Schleife?
Wenn ein Thread eine Aufgabe erledigt brauchst Du eigentlich keine For-Schleife.
Und welche Aufgabe hast Du 10.000 Mal durchführen lassen und hast Du auch die Progressbar 10.000 mal neu zeichnen lassen?
Dann lass einfach nur jeden 100. Durchgang die Progressbar aktualisieren.
Dann bist Du in 100 Schritten bei 100% und gut ist.
Forum: Programmieren allgemein
by stahli,
25. Okt 2016
Aber damit schießt Du mit Kanonen auf Spatzen. ;-)
Irgendwann kommst Du dazu, dass die Organisation der simplen Zwischennachricht aufwendiger wird als Deine Berechnung selbst.
Du kannst das natürlich so machen, aber es ist m.E. unnötig kompliziert und bietet keinen wirklichen Vorteil.
Hast Du denn irgendwie Hänger oder spürbare Verzögerungen, wenn Du aus dem Arbeitsthread einfach...
Forum: Programmieren allgemein
by stahli,
25. Okt 2016
Die Timerbehandlung ist kein Thread.
Der Mainthread rödelt ständig in einem Loop und schaut, was zu tun ist.
Er prüft, ob Tastaturnachrichten anliegen und gibt diese an die Controls weiter.
Dann schaut er, ob OnIdle etwas zugewiesen ist und führt das aus, wenn sonst nichts zu tun ist.
Und er schaut, ob Timermessages anliegen.
Dann behandelt er diese, indem die zugewiesene...
Forum: Programmieren allgemein
by stahli,
25. Okt 2016
Das halte ich auch für den richtigen Weg.
Allerdings würde ich mir den Aufwand mit einem Event ersparen und das Formular dem Thread direkt bekannt machen, sofern die Funktionalität nur in diesem einen Formular benötigt wird.
Aber mit Event ist es natürlich noch klarer voneinander entkoppelt.