Можно, например, какой-то флаг поднимать, когда пора функции прекратить работу. А внутри функции, по возможности, смотреть, не поднят ли флаг, и если да – выходить.
var flag = false; // когда будет true - тушите свет!
function game() {
var i;
while(true) { // на самом деле из цикла так не выйти
// пока он крутится, другие потоки не смогут запуститься и изменить значение флага
i = i++;
if(flag) return; // выход, когда пора
}
}
setTimeout( function(){ flag = true;}, 60000}); // через минуту поднять флаг
game();
Другой вариант, более подходящий для цикла - заранее назначить время выхода и смотреть на часы:
var timeToExit = (new Date).getTime() + 300000; // через 5 минут
function game() {
var i;
while(true) {
i = i++;
if( (new Date).getTime() >= timeToExit) return; // выход, когда пора
}
}
game();