-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Wie wärs damit: ich meinte Execute und nicht ExecuteTimed.
Ist doch jetzt aber auch egal. Es klappt, fertig aus ende.
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Wurden dir die neuen Antworten nicht angezeigt?
Die Schleife ist schon lange weg.
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Ich habe keinen. Es war nur eine Frage für die Zukunft.
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Eine Frage habe ich noch zu diesem ExecuteTimes.
In ExecuteTimed ist eine while-Schleife. Was aber, wenn ich eine Aufgabe habe die von Anfang bis Ende nur einmal durchlaufen soll und wo ich keine Schleife benötige?
Würde man in diesem Falle den Thread dafür erzeugen und sofort terminieren?
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Zum Glück seid ihr keine Lehrer. Denn sonst hättet ihr mit circa 90% solcher Idioten zu tun wie ich :thumb:
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Wenn ich aber das Property Enabled verwende, hat das nicht denselben Zweck.
SetEvent bräuchte ich, um sofort aus dem WaitFor rauszukommen und alles weitere in ExecuteTimed auszuführen.
Enabled auf False stellen würde WaitFor für INFINITE lang im Kreis rennen lassen.
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Von Außen kann man den Thread leider nur aufwecken, wenn man folgende Änderungen in der Unit vornimmt
public
property Event: TEvent read FEvent write FEvent; // Damit man Event von Außen überhaupt sieht
Und in TCustomThread.Execute
// Aus
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Ich denke ich habs jetzt raus.
Das while in override ExecuteTimed muss natürlich raus weil das TCustomThread.Execute; in einer Schleife ja auch immer ExecuteTimed aufruft.
Nun funktioniert auch Enabled richtig.
Wie soll ich denn das Event vergessen. Braucht man das im eigenen Thread, also der Ableitung, im ExecuteTimed gar nicht?
Dann wird Beitrag 18 vermutlich falsch sein...
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Damit das mit dem Event auch klappt, habe ich folgende Zeile in der Hauptunit (Beitrag 2) eingefügt. Ansonsten kann ich Event in einer Ableitung nicht sehen.
public
property Event: TEvent read FEvent write FEvent;
ExecuteTimed also. Ok. Ich habe währenddessen ein bisschen rumprobiert um zu sehen wie der Thread reagiert je nachdem was ich mache.
Mit dem Event-Property funktioniert dann...
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Leider -200 Gummipunkte für mich. Ich glaube ich bin zu dämlich dafür die Ableitung aus Beitrag 2 zu nutzen :pale:
var TestThread: TTestThread;
procedure TForm1.Button2Click(Sender: TObject);
begin
TestThread:= TestThread.Create;
TestThread.Interval := 60000;
end;
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
100 Gummipunkte für meinen Hohlkopf!
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
procedure TNormalThread.Execute;
begin
Sleep(60000);
end;
Angenommen ich würde mein Programm nun beenden. Dann müsste ich noch so lange warten, bis Sleep() vorbei ist.
Mit den Events habe ich das jetzt so verstanden, dass das WaitFor unterbrochen wird, sobald ich das Signal dazu an den Thread schicke (z.B. im OnClose).
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Das hat geholfen!
Das bedeutet zwangsweise, dass ein langes Warten bei einem Sleep umgangen wird wenn der Thread beendet wird.
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
3. Jan 2018
Mich intertessiert aber trotzdem noch wie man so einen Thread aufweckt und schlafen legt.
Und wie man auf Terminate reagiert und ob man in WaitFor festhängt.
Und woher kommt das Ergebnis von FEvent.WaitFor? Muss man das von Außen setzen?
Am wichtigsten ist aber die Frage was überhaupt der Unterschied ist
// Sleep(1000);
res := FEvent.WaitFor(FInterval); // also z.B. 1000
// was zu tun
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
2. Jan 2018
Ich probiere das gleich mal aus! Danke.
Habe mich anders entschieden. Ist mir den Aufwand nicht wert.
Ich belasse alles so wie es aktuell ist. Mit Sleep fahre ich gut.
Außerdem kapier ich das eh nicht.
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
2. Jan 2018
Das verstehe ich jetzt. Könntest du das Minimalbeispiel oben eventuell umändern? Vielleicht verstehe ich dann auch den Rest und die Handhabe generell.
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
2. Jan 2018
Ich verstehe ehrlich gesagt den Sinn von Events in diesem Falle nicht.
Warum nicht einfach einen Sleep und fertig?
Wie sieht denn dieses Beispiel mit der Event-Thread-Ableitung aus? Vielleicht kapiere ich es dann.
Die 5 Stunden waren nur ein Beispiel.
procedure TMyNormalThread.Execute;
begin
while not Terminated do
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
2. Jan 2018
Angenommen ich möchte einen Thread 5 Stunden schlafen legen und er soll nach diesen 5 Stunden alleine aufwachen.
Wie bewerkstellige ich das ohne Sleep?
-
Forum: Object-Pascal / Delphi-Language
by LTE5,
2. Jan 2018
Weile ich ein anderes Thema damit nicht belasten möchte hier die Frage.
Ist dieser TimerThread mit Warte-Events nicht anderes als ein normaler TThread mit einer while-Schleife und einem Sleep(1234) im Execute-Teil?
Nur.. mit Events eben.. und nicht mit Sleep?
Wie sähe das hier mit dem TimerThread aus?
procedure TMyNormalThread.Execute;
begin