AGB  ·  Datenschutz  ·  Impressum  







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

Timer-Frage

Ein Thema von Lifthrasir · begonnen am 26. Apr 2011 · letzter Beitrag vom 27. Apr 2011
Antwort Antwort
Lifthrasir

Registriert seit: 8. Nov 2006
Ort: Schwerin
64 Beiträge
 
Delphi 7 Personal
 
#1

Timer-Frage

  Alt 26. Apr 2011, 17:32
Hi,

also bei verschiedenen Programmen ist mir aufgefallen, dass wenn eine sehr große oder lange Prozedure abgearbeitet wird, dass Programm scheinbar hängt oder stehen geblieben ist. Bzw. lassen sich Prozeduren nicht via eines Buttons abbrechen oder pausieren, denn ich denke mal das Program wird die 'Aufgabe' erst abarbeiten ehe eine 'Neue' gestartet wird.

Um nun aber dennoch Pause für Aktionen zu haben, oder einfach damit das Programm nicht 10 min freezed, zerlege ich diese Prozeduren nun in Häppchen und gebe sie einem Timer.

Dies ist wahrscheinlich eine recht dumme Art und Weise um das Problem zu klären, aber eine Bessere fällt mir nicht ein.
Die Frage jedoch ob es zu Systemabstürzen kommen kann bleibt. Vllt hatte ich ja nur Glück. Ich meine, wenn das Timer-Intervall auf 1, also auf 1 ms steht ehe es neu beginnt, die Timer-Prozedure aber in der Berechnung länger als 1ms dauert, hatt dies Folgen für den Rechner, Ressourcen etc? Oder wartet Timer bis es abgearbeitet wurde und startet danach die nächste Periode?

Danke für eure Antworten
---
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Timer-Frage

  Alt 26. Apr 2011, 18:09
Die Lösung heißt Threads.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Lifthrasir

Registriert seit: 8. Nov 2006
Ort: Schwerin
64 Beiträge
 
Delphi 7 Personal
 
#3

AW: Timer-Frage

  Alt 26. Apr 2011, 18:13
Threads - sagt mir noch nichts, muss ich mich wohl belesen


Danke für den Hinweis, werde der Sache mal nachgehen
---
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Timer-Frage

  Alt 26. Apr 2011, 18:45
Dies ist wahrscheinlich eine recht dumme Art und Weise um das Problem zu klären, aber eine Bessere fällt mir nicht ein.
Das ist tatsächlich keine allzu gute Option Angst vor Systemabstürzen musst du keine haben, aber die Lösung ist schon sehr "dirty".
Threads wären genau das richtige, allerdings benötigt man dafür schon etwas Hintergrundwissen. Eine andere Möglichkeit, damit das Programm zumindest nicht vollständig einfriert, ist folgendes: Probier mal Application.ProcessMessages aus:

Delphi-Quellcode:
for i := 0 to 100 do
begin
  Sleep(1000);
  Application.ProcessMessages;
end;
Dies veranlasst, dass alle anstehenden Messages verarbeitet werden, bevor die Schleife fortgeführt wird. So ließe sich sogar eine "Abbrechen"-Funktionalität basteln.

Übrigens: ein Timer hat nur eine Auflösung von einigen MS im zweistelligen Bereich, d.h. wenn du das Intervall auf 1 ms stellst, dann wird das Timer-Event gar nicht jede MS getriggert sondern nur alle 15 oder 20
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  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

AW: Timer-Frage

  Alt 26. Apr 2011, 18:57
Hey,

das Problem, welches du hast ist folgendes: dein Programm hat einen Thread (="Mainthread") und in diesem Thread läuft quasi alles ab. Windows ist, wie du vielleicht schon weiß, Nachrichten-basiert, d.h. bei einem Klick wird eine Nachricht an das Programm geschickt, welches diese dann an den Button weiterleitet. Genauso läuft das auch mit dem Neuzeichnen, Drag & Drop und sonstigen Aktionen. Diese Nachrichten werden aber erst dann abgearbeitet, wenn der Haupthread eben Zeit dafür hat. Da hat er natürlich nicht, wenn der Thread deine lange Methode abarbeitet. Daher reagiert dein Programm auch nicht mehr, jedenfalls so lange nicht mehr, bis die Methode eben beendet ist.

Das Application.ProcessMessages macht folgendes: es schaut nach, ob aktuell Nachrichten vorhanden sind, die abgearbeitet werden sollten, unterbricht quasi die aktuelle Methode und arbeitet dann eben die Nachrichten ab. Dies führt dann aber dazu, dass die eigentliche Ausführungsdauer noch etwas länger ist, da zwischendurch ja noch was anderes gemacht wird.

Daher ist es sinnvoll sich hier Threads anzuschauen, da diese wirklich parallel zum Mainthread laufen und den Mainthread nicht behindern oder blockieren -- außer man will, dass das so ist. Schau dich hier im Forum mal zum Thema um, du wirst massig Threads, auch zu deinem Problem finden.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Lifthrasir

Registriert seit: 8. Nov 2006
Ort: Schwerin
64 Beiträge
 
Delphi 7 Personal
 
#6

AW: Timer-Frage

  Alt 26. Apr 2011, 22:04
Hmm..

Ja scheint dann noch etwas Arbeit auf mich zu warten..

Danke für die guten Antworten, ich denke mir wurde geholfen
---
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#7

AW: Timer-Frage

  Alt 26. Apr 2011, 22:08
Ich stand auch mal vor dem Problem. Wenn du dich für TThreads entscheidest solltest du es relativ schnell raus haben.
  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
 
#8

AW: Timer-Frage

  Alt 26. Apr 2011, 22:26
Ich stand auch mal vor dem Problem. Wenn du dich für TThreads entscheidest solltest du es relativ schnell raus haben.
Man kann aber auch in viele Probleme rein laufen Auf ein richtig gutes VCL-Tutorial warte ich immer noch. Das von Luckie ist natürlich klasse, aber da wird eher der technische Aspekt behandelt. Man ist sich anfangs sehr vieler Probleme noch nicht so recht bewusst, ebenso der DO and DONTs. Aber wie schon gesagt, hier im Forum findet sich sehr viel dazu!
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#9

AW: Timer-Frage

  Alt 27. Apr 2011, 00:50
Try & Error Ich konnte vieles hier im Forum besprechen! Ansonsten gibt es auch viele gute englische Artikel wenn man sich via Google auf die Reise macht
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:32 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