Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

AW: Timing problem

  Alt 8. Apr 2011, 00:51
Delphi-Quellcode:
while GetTickCount < Tick + TempoWait do
  Winprocessmessages;
Warum nicht einfach Sleep(TempoWait); ?

In einem eigenständigen Thread hättest du damit keinerlei Propleme
und eine derartige Schleife macht absolut nix anderes, außer Rechnen und ständiges Nachsehn, ob es noch was zum Rechnen gibt. (also andere Programme können da garkeine Zeit von abgekommen, eher im Gegenteil ... du verbrätst sinnlos wertvolle Rechenzeit)


Notfalls ginge es im Hauptthread auch noch so:
Delphi-Quellcode:
Tick := GetTickCount + TempoWait;
Winprocessmessages;
Dec(Tick, GetTickCount);
if Integer(Tick) > 0 then Sleep(Tick);
Wenn dein Programm aber mal viele/langwierige Messages zu verarbeiten hat, dann stockt es aber so oder so, es sei denn man versucht immer nur soviele Nachrichten zu verarbeiten, wie in TempoWait genögend Zeit finden und verschiebt den rest auf die nächsten Schleifendurchläufe.


Fazit: Es liegt ein Designfehler vor wenn du eine derartige "Zeitkritische" Aufgabe, wie deine Soundausgabe, in den unberechenbaren Hauptthread legst.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 8. Apr 2011 um 00:54 Uhr)
  Mit Zitat antworten Zitat