Mh, dazu brauchst du set_time_limit nicht unbedingt, diese Funktion ist mehr dazu gedacht, die maximale Ausführungszeit eines Scripts zu erhöhen, z.B. bei aufwändigen Berechnungen/Abfragen. Daher ist diese Funktion in safe mode auch wirkungslos - siehe entsprechender Hinweis im Manual:
http://de2.php.net/manual/en/function.set-time-limit.php
Dein Problem lässt sich einfacher lösen: du "stoppst" zu Beginn deines Scripts die aktuelle Systemzeit und vergleichst diese Startzeit innehrhalb der Schleife immer wieder mit der aktuellen Systemzeit.
$limit = 20;
$start_time = time();
while (time() < ($start_time + $limit)) {
//... warten oder irgendwas Sinnvolles versuchen ;)
}
So ungefähr sollte es gehen.