AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Uhr ohne Hilfe vom "Ttimer" erstellen

Offene Frage von "poloroyd"
Ein Thema von poloroyd · begonnen am 27. Apr 2010 · letzter Beitrag vom 30. Apr 2010
Antwort Antwort
Seite 3 von 4     123 4      
hathor
(Gast)

n/a Beiträge
 
#21

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 11:17
Wo ist eigentlich poloroyd(TE)?
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#22

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 11:24
Die hat sicherlich gestern ihrem Lehrer gebeichtet, dass sie die Hausaufgaben nicht hat. Oder spontan von nem Freund kopiert.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#23

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 17:14
@Michael

Delphi-Quellcode:
finish := not finish;
while not finish do
begin
  // Dein Code
end;
Wenn man schon ein überflüssiges goto wegposten will (in diesem Fall sogar berechtigter Weise), dann doch bitte mit Code, der erstens funktioniert und zweitens nicht unnötig kompliziert ist:
Finish := not finish???????
Sollte doch hier heissen:
Finish := false;

Und wozu überhaupt eine unnötige Variable einführen, die an einer anderen stelle im Code deklariert werden muss und zu nichts gut ist?
While true do begin .... end
bzw noch einfacher
repeat .... until false
tuts doch genauso.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#24

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 17:18
@Idefix: Die Variable finish kann man in der gleichen ButtonClick Prozedure deklarieren. Dann kann man mit der gleichen Schaltfläche den Vorgang auch wieder abbrechen. Bei deiner Methode ist ein Abbrechen unmöglich.

Ich habe mir dabei schon was gedacht.

Zitat von idefix2:
Finish := not finish???????
Sollte doch hier heissen:
Finish := false;
Nein sollte es nicht. Über leg mal, was passiert, wenn man bei meinem Code die Variable mit False initialisiert und was dann bei jedem Klick auf die Schaltfläche passiert?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
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
hathor
(Gast)

n/a Beiträge
 
#26

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 21:49
@David Martens:

Was Du schreibst ist Unsinn.

1. Ich habe Deinen Code getestet, weil ich wissen wollte, ob mich mein erster Blick trügt:
ich irrte mich nicht: die CPU-Temperatur geht steil nach oben!

2. Wenn ich eine genaue Uhr habe, spielt es keine Rolle, WANN ich auf die Uhr schaue: die Uhrzeit wird immer genau sein - oder verstehst Du nicht, was "Label1.Caption:= TimeToStr(now);" macht?

3. Eine Alternative zu "Goto" habe ich hinzugefügt - weil ich diese krankhafte Abneigung mancher "Programmierer" seit Jahren kenne...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#27

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 21:56
while now - tick < 0 do ; Heizt die CPU auf, da der Thread mit 100% CPU-Leisung ständig irgendwas brechnet, vergleicht oder ausließt.

while now - tick < 0 do sleep(10); Läßt dagegen den Thread die meißte Zeit schlafen.
$2B or not $2B
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#28

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 22:47
@ Hathor

Auch ohne den Code zu testen - Dein erster Blick trügt Dich. Eine statische Untersuchung des Programmcodes ist in dem Fall absolut trivial:
In der while Schleife wird bei jedem Durchgang eine 10ms lange Pause eingelegt, in der die CPU nichts tut und der Programmthread still liegt. Wenn etwas deine CPU aufheizt, dann ist es sicher nicht diese Schleife.

Ich gehöre nicht auch zu den Fundamentalisten, die lieber drei geschachtelte while-Schleifen mit drei Boolean Variablen und 5 Abfragen machen statt eines einfachen goto, mit dem man sich das theater spart, weil sie das goto scheuen wie der Teufel das Weihwasser. Aber bei deinem Code ist ein goto wirklich fehl am Platz, weil eine "repeat until false" oder eine "while true do" Schleife auf klarere und einfachere Art das gleiche leistet (keine Label-deklaration nötig), und der Code für jeden, der ihn liest, klarer und verständlicher ist als ein Code, der goto enthält: ein Label kann im Prinzip von verschiedenen Stellen aus angesprungen werden, und bindet deshalb zwangsläufig mehr Aufmerksamkeit von dem, der sich in das Programm einlesen muss, als eine Repeat oder while Schleife, wo die Schleifenstruktur explizit klar ist.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#29

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 22:59
@ Luckie

Die Idee, die (Endlos)Schleife mit einer Variable abzubrechen, die man durch Klick auf einen Button umschalten kann, ist schon gut, aber erraten konnte man diese Absicht aus Deinem geposteten Code nur schwer. Und der erste Befehl, finish := not finish, bleibt für mich auch in dem Kontext unverständlich, weil es ja vom restlichen Programm abhängt, welchen Wert die Variable finish vorher hat.
Wenn ich überhaupt will, dass die Schleife begonnen wird, ist an der Stelle finish := false eher angebracht, über einen Button kann man dann den variablenwert umschalten und die Schleife abbrechen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#30

Re: Uhr ohne Hilfe vom "Ttimer" erstellen

  Alt 29. Apr 2010, 23:12
Nun ja, ich habe eben vorausgesetzt, dass man etwas mitdenkt und meinen Code mehr als Anregung gesehen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz