Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Timer in Schleifen unwirksam ? (https://www.delphipraxis.net/156456-timer-schleifen-unwirksam.html)

erik-17 2. Dez 2010 15:09

Delphi-Version: 5

Timer in Schleifen unwirksam ?
 
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 :D

PS: Arbeite mit Delphi 3 Professional

himitsu 2. Dez 2010 15:22

AW: Timer in Schleifen unwirksam ?
 
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.

p80286 2. Dez 2010 15:34

AW: Timer in Schleifen unwirksam ?
 
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

erik-17 2. Dez 2010 15:55

AW: Timer in Schleifen unwirksam ?
 
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 :D
Jetzt läuft auch der "normale" Timer ordentlich

LG


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz