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.