AGB  ·  Datenschutz  ·  Impressum  







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

Probleme mit Timer und sleep

Ein Thema von happyaura · begonnen am 17. Mai 2006 · letzter Beitrag vom 17. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#1

Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:04
Hallo,
ich habe ein problem mit einem Timer in kombination mit sleep. Aus meinem Programm hab ich mal ein paar Zeilen seperiert, bei denen das Problem genau so auftritt:

Delphi-Quellcode:
type Tsensor = record kanal,
                         wert : integer;
                         lab : Tlabel;
              End;
var
  sensor : Array[1..2] of Tsensor;
Delphi-Quellcode:
procedure TForm1.onTimer(Sender: TObject);
var i:integer;
begin
  timer.Enabled:=false; //damit der Timer sich nicht selbst überholt, bzw in 2 instanzen läuft.
  for i:= 1 to 2 do
  begin
    //sende anfrage an einen sensor, messdaten zu erstellen
    sleep(200); // warte bis sensor wert gewandelt hat
    inc(sensor[i].wert); // simuliertes auslesen des Sensors
    sensor[i].lab.caption:=inttostr(sensor[i].wert); // ausgabe

    sleep(500) // <- auch dieses sleep würde nicht das bewirken, was ich vermutet hätte,
                      // ist aber nur für testzwecke

    if(sensor[i].lab.Font.Color=clred) then //farbe toggeln um 2 gleiche meßwerte auseinander zu halten.
          sensor[i].lab.Font.Color:=clblack
        else
          sensor[i].lab.Font.Color:=clred;
  end;
  timer.Enabled:=true; //bereit für neue timer interrupts
end;
dieser Programmcode hat zur folge, dass beide Labels gleichzeitig ihren Wert und ihre Farbe ändern, vermutet hätte ich aber eine reihenfolge wie:
label 1 wird hochgezählt
500 ms
label 1 wird rot
200ms
label 2 wird hochgezählt
500ms
label 2 wird rot
200ms
label 1 wird hochgezählt,
500ms
label 1 wird schwarz
...

woran liegt das? bin ich nur zu doof das zu verstehen? mir kommt es so vor, als ob alle sleeps aufsummiert werden und ans ende der onTimer Prozedur gepackt werden.
ach ja, bei mir läuft der Timer mit 100ms, was in diesem programm wenig sinn macht, aber in dem eigentlichen schon, da die sensoren nur abgefragt werden sollen, wenn sie wirklich dran sind. dafür auch das timer.enabled=true oder false. muß ich mich überhaupt von hand drum kümmern, dass onTimer nicht doppelt aufgerufen wird oder macht das delphi von alleine?
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:10
das sleep bewirkt ja, dass dein Programm komplett stehen bleibt d.h. kein aktualisierung der labels passiert. Schon mal mit ProcessMessages gearbeitet und das ausprobiert?

Das macht nämlich eine Pause, arbeitet aber alle Befehle die vorher geschehen sind noch ab... (Hier im Forum suchenProcessMessages)
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#3

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:15
mit prozessmessages hab ich noch nicht gearbeitet, aber auch wenn während des Sleeps der Prozess stehen bleibt, sollten doch die zeilen zwischen den sleeps auch dazwischen ausgeführt werden, oder seh ich das falsch?
ich füg das Projekt zum ausprobieren mal in den anhang. Vielleicht verhält es sich ja in anderen Delphi versionen anders...

was wären denn möglichkeiten, das Sleep zu umgehen? ich meine, ich hab hier sogar mal 'nen artikel dazu gesehen, werd gleich noch mal schauen.

Gruß Martin
Angehängte Dateien
Dateityp: zip test_sleep_129.zip (6,5 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#4

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:21
habs gerade mal ausprobiert, ich denke, das wars. vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:24
wenn du einen Sleep-Befehl aufrufst, dann bleibt er "genau" (über diese Bedeutung lässt sich bei Sleep gewaltig streiten) an dieser Postion stehen, d.h. es wird kein weiterer Befehl abgearbeitet - dein Programm steht KOMPLETT...

Daher nutze ich lieber ProcessMessages - ist etwas flexibler!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:40
Die Befehle zwischen dem Sleep werden schon ausgeführt, allerdings bekommt das Programm keine Möglichkeit die Anzeige zu aktualisieren, also deine Änderungen zu zeichnen.

Dieses geschieht halt erst nach der Prozedur, oder halt in ProcessMessages, also da wo die WindowsMeldungen (wie z.B. der Befehl zum Neuzeichnen) abgearbeitet werden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
happyaura

Registriert seit: 12. Jan 2005
Ort: Hamburg
73 Beiträge
 
Delphi 6 Personal
 
#7

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:46
aso,
mein problem war nur, dass ich da interferenzen mit alten messwerten hatte, hab aber nun festgestellt, woran das lag, hab mein nicht lange genug auf meine meßwerte gewartet... aber application.processmessages macht das natürlich doch etwas schöner.

wie schauts mit einer Antwort zu meiner zweiten frage aus, kann theoretisch der Timerinterrupt ausgelöst werden, wenn sich das Programm noch in der Prozedur OnTimer befindet?
und zählt der Timer während sleep weiter? wahrscheinlich nicht, oder?

Besten Dank,
Martin
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:47
Der Timer hat keine Interrupts. Das funktioniert mit Nachrichten und während des Sleeps werden auch keine Nachrichten abgearbeitet.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 09:50
Zitat von happyaura:
was wären denn möglichkeiten, das Sleep zu umgehen? ich meine, ich hab hier sogar mal 'nen artikel dazu gesehen, werd gleich noch mal schauen.
das Stichwort für die Suche ist "delay".
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Probleme mit Timer und sleep

  Alt 17. Mai 2006, 10:00
Wenn du jetzt DELAY, oder ProcessMessages einbaust, dann könnten wärend des Laufs der TimerProzedur noch weidere Prozesse gestartet werden, also auch nochmal eine TimerProzedur, allerdings würde wärdend die nächste TimerProzedur läuft die erst angehalten, weil erst nach dem ender der letzten Prozedur das DELAY/ProcessMessages beendet wird.

Ohne DELAY, ProcessMessages und dergleichen würde die TimerProzedur nur einmal gestartet, weil die WindowsNachrichten ja erst danach abgearbeitet würden und demanch erst dann die nächste TimerProzedur gestartet werden könnte.s
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:24 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