Der Sleep-Befehl verhält sich meiner Meinung nach komisch, und ganz anders als ich mich von früher (von Delphi) her erinnern kann. Ich habe folgenden Code geschrieben:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i:=10 downto 1 do
begin
Button1.Caption:=IntToStr(i);
sleep(1000);
end;
end;
Erwartet hatte ich, dass er dann in Sekundentakt herunter zählt. Da sleep die Ausführung des Programms um die Eingetragene Zeit (in Tausendstel Sekunden) eben an der Stelle anhalten soll. So steht es zumindest auch im FreePascal-Buch.
Aber bei mir tut sleep gar nicht an der Stelle anhalten, sondern scheinbar zählt er alle sleep zusammen, also alle 10 Durchläufe, wartet die Ganze Zeit ab, und führt dann all den gesamten restlichen Programmteil aus. Zuerst passiert also gar nicht, außer dass der Button gedrückt aussieht, für 10 Sekunden, und dann erscheint die 1. Keine Sekunden-Herunter-Zählen.
Und das passiert in den Unterschiedlichsten Variationen. Sogar wenn ich Button2Click(Sender) einfüge, wo dann sleep ausgeführt wird (somit also sleep auslagere, in der Hoffnung dass er dann zuerst nur den Code im Button2 abarbeitet), wird all dies zusammen gezählt, und nach Ablauf der gesamten Zeit, dann der Restliche Code ausgeführt.
Soll das so sein? Und wie hat man das überhaupt geschafft? Weil meiner Meinung nach muss das doch recht aufwendig sein, erst mal alle aus zu führenden sleep zusammen zu zählen, und dann hernach nach der gesamten Wartezeit die restlichen Code-Zeilen dann ohne sleep auszuführen?
Danke.