Kennst du das Konzept einer sog.
Nachrichtenschleife ?
Ist zwar auch eine Schleife, aber in der Bedingung steht eine Funktion die erst zurückkehrt wenn etwas passiert ist.
also sowas wie
var job;
while getStuffToDo(job) do
begin
PrepareJob(job);
Execute(job);
end;
Damit wird keine Rechenzeit in unnötigen Schleifendurchläufen verbraten