AGB  ·  Datenschutz  ·  Impressum  







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

Timer in Schleifen unwirksam ?

Ein Thema von erik-17 · begonnen am 2. Dez 2010 · letzter Beitrag vom 2. Dez 2010
Antwort Antwort
erik-17

Registriert seit: 8. Apr 2010
51 Beiträge
 
Delphi 3 Professional
 
#1

Timer in Schleifen unwirksam ?

  Alt 2. Dez 2010, 15:09
Delphi-Version: 5
Hey Leute,

gibt es irgendeine Möglichkeit, nach einer festgelegten Zeit etwas auszuführen, wenn nebenbei eine Schleife läuft?
Ein Timer kann ja während einer Schleife die Botschaft (Timer abgelaufen) des OS nicht abarbeiten, die geschickt wurde.

Ein Thread zu erstellen habe ich schon versucht... brachte aber nichts.
Im Moment hab ich in jedem Schleifendurchlauf ein "Application.ProcessMessages", damit die Timer-Event-Prozedur auch mal was machen kann, aber bei 1000 Durchläufen pro Sekunde ist das etwas rechenintensiv. Gibt es da einen anderen Befehl, der "stärker" ist, als die Priorität der Schleife, also, dass nach 250ms meine Prozedur erzwungen wird?

Danke schon im voraus für eure Antworten

PS: Arbeite mit Delphi 3 Professional
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Timer in Schleifen unwirksam ?

  Alt 2. Dez 2010, 15:22
Lange Schleifen gehören nunmal nicht in den Hauptthread!

Im Notfall kann man aber das Ausführen von ProcessMessages etwas ausbremsen.
Delphi-Quellcode:
C := GetTickCount + 200;
scheife
begin
  if C < GetTickCount then
  begin
    Application.ProcessMessages;
    C := GetTickCount + 200;
  end;
  ...
end;
Die 200 snd ein von mir festgelegter Wert (100 bis 250 eignen sich dafür, daß die GUI nicht all zu start stockt)
Diesen Wert kannst du je nach Timereinstellung noch anpassen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Timer in Schleifen unwirksam ?

  Alt 2. Dez 2010, 15:34
Eine andere Möglichkeit wäre etwa

Delphi-Quellcode:
for i:=0 to counter do begin
  if i and $0F= 0 then application.processmessages;
  ....
  { hier wird gearbeitet}
  .....
end;
wobei processmessages z.B. natürlich auch Clicks auf Buttons verarbeitet, was dann "ChaosMultitasking" auslöst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
erik-17

Registriert seit: 8. Apr 2010
51 Beiträge
 
Delphi 3 Professional
 
#4

AW: Timer in Schleifen unwirksam ?

  Alt 2. Dez 2010, 15:55
Ich hab es jetzt doch mit einem Thread geschafft, vorher kam ich nicht ganz damit klar, dass der Thread ein Signal sendet, wenn er fertig ist. Jetzt ist es zwar ein bissl uneleganter aber auch durch den Thread wieder etwas besser
Jetzt läuft auch der "normale" Timer ordentlich

LG
  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 12:05 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