1

以下の遅延関数のセットを別の関数から一時停止する方法はありますか?別の関数を実行して、すべてを10秒間一時停止したい。

私が必要としているのは次のようなものです。

function pause(){
pause sleepLoop() for 10 seconds
}

以下の実行を一時停止できない場合、それを強制終了できますか?

function game() {
sleepLoop();
}

function sleepLoop() {
loop...
setTimeout('gameActions()',5000);
}

function gameActions() {
actions...
sleepLoop();
}
4

3 に答える 3

1

タイマーを変数に格納します。次に、clearTimeoutで停止し、10秒後に再起動できます。

function game() {
   sleepLoop();
}

var sleepLoopTimeout;

function sleepLoop() {
    gameActions();
    sleepLoopTimeout = setTimeout(sleepLoop,5000);
}

function pause(){
    clearTimeout(sleepLoopTimeout);
    setTimeout(sleepLoop, 10000);
}

function gameActions() {
    // Actions
}
于 2012-04-09T23:10:21.893 に答える
0
var gameTimeout, sleepTimeout;

function game() {
   gameTimeout = setTimeout(sleepLoop, 10000); //start in 10 seconds
}

function sleepLoop() {
   sleepTimeout = setTimeout(gameActions, 5000); //start in 5 secs
}

function gameActions() {
   sleepLoop();
}

//start it off:
game();

上記以外に、何を求めているのかわかりません。


タイムアウトを強制終了(クリア)するには:

clearTimeout(gameTimeout);
clearTimeout(sleepTimeout);
于 2012-04-09T19:34:00.783 に答える
0
var blocked = false;

function loopToBePaused()
{
    if (blocked !== false)
    {
        // will check for blocker every 0.1s
        setTimeout(loopToBePaused, 100);
        return;
    }
    // payload

    // normal loop now, e.g. every 1s:
    setTimeout(loopToBePaused, 1000);
}

// somewhere in code run:
blocked = setTimeout(function() {
    // blocking our loop'ed function for 10s
    blocked = false;
}, 10000);
// this will block our main loop for 10s
于 2012-04-09T19:37:36.223 に答える