Einzelnen Beitrag anzeigen

David Martens

Registriert seit: 29. Sep 2003
205 Beiträge
 
Delphi XE Enterprise
 
#25

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 21:27
@hathor: Wie ich sehe muß ich hier mein Post verteidigen.

1.
Zitat von hathor:
Der Vorschlag in #5 ist unbrauchbar - da kann man die CPU als Heizung benutzen.
Zitat:
while now - tick < 0 do sleep(10);
es wird höchstens 100 mal eine einfache Rechnung gemacht, wenn dir das zu viel ist, dann warte doch einfach länger.
Zu Pascal-Zeiten hat der delay Befehl die CPU geschäftigt, heutzutage legt der sleep Befehl die CPU (für diesen Thread) schlafen, also kann sich CPU ausruhen. Die 10 Millisekunden hab ich gewählt um die Uhr nicht all zu viel nachgehen zu lassen. Bei 10 Millisekunden sind es maximal 10, wenn ich dort 100 eintrage sind es eben 100. Beides ist für den Menschen nicht erkennbar, aber man sollte doch schon schön genau sein.

2.
Zitat von hathor:
Die Funktion MsgWaitForMultipleObjects ist die Lösung:

Delphi-Quellcode:
...
Label go;
...
Goto go;
...
Das ist jetzt nicht dein Ernst. Ein goto im Quelltext und der Lehrer wird garantiert eine 6 dafür vergeben, das war ja zu meiner Zeit schon so. Und das soll besser sein als mein Quellcode?

3.
Zitat von hathor:
Delphi-Quellcode:
begin
go:
  ms:=1000; //millisec
  Event := CreateEvent(nil, False, False, nil);
  try
    Tick := GetTickcount64 + ms;
    while (ms > 0) and
         (MsgWaitForMultipleObjects(1, Event, False, ms, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      if Application.Terminated then Exit;
      ms := Tick - GetTickcount64;
      Application.ProcessMessages;
    end;
  finally
    CloseHandle(Event);
  end;
Label1.Caption:= TimeToStr(now);
//Uhr zeichnen
Goto go;
end;
Damit wird deine "Uhr" immer nachgehen. Die Uhr wird die Zeit nachgehen die der Rechner braucht um Application.ProcessMessages; auszuführen.
Meine Uhr geht auch nach, aber der Effekt ist nicht kumulativ, und auch nur für die Berechnung des neuen Ticks.

4.
Es ist eine einfache Schulaufgabe und da sollte man es auch einfach machen. Dein Quellcode kann von einem Schüler nicht stammen.

Gruß David
  Mit Zitat antworten Zitat