2011-07-29 10 views
0

次のコードでタイマーを開始しました。別のタイマーがwindow.setIntervalメソッドに渡されたメソッドでアクティブな場合、window.setIntervalメソッドを失敗させることは可能ですか?一度に1つのタイマーをアクティブに制限する

GInterValId = window.setInterval("AutoRefresh()",parseInt(GRefreshInterval)); 

答えて

1

。すべてのあなたのタイマーを扱うオブジェクトを作成します。他の1がアクティブであるため、2番目の1が実行されません

function doSomething() {...}  // function example 
function doSomethingElse() {...} // function example 

var MyTimer = new Timer(); 

MyTimer.setTimer(doSomething,1000); // this will run 

MyTimer.setTimer(doSomethingElse,1000); // this will not run 

var Timer = function() { 
    var currentTimer; 

    this.setTimer = function (func,time) { 
     if (currentTimer) { 
      alert("one timer already set"); 
     }else { 
      currentTimer = setInterval(func,time); 
     } 
    } 

    this.stopTimer = function() { 
     clearInterval(currentTimer); 
     currentTimer = null; 
    } 
} 

今、あなたはこのコードを使用することができます。 最初のものがクリアされていることを確認してください。

MyTimer.stopTimer(); // will clear the current timer then you can run another one 
MyTimer.setTimer(doSomethingElse,1000); // will run perfectly 
+0

間隔をクリアすると、* currentTime *の値をリセットしたい場合は、現在のものが停止していても別のものを起動できなくなります。 – RobG

+0

@RobG:ポイントを下回らないでください。 – Maanu

+0

@RobG:そうです、私はcurrentTimerをnullに設定しました。この方法では、最初の条件に合格しなくなり、新しいタイマーが設定されます – Ibu

1

window.setInterval()の結果結果を追跡する場合は、前のインターバルタイマーをいつでも停止できます。その後

var GInterValId = setInterval(AutoRefresh, parseInt(GRefreshInterval)); 

、あなたがそれをリセットしたい:

if (GInterValId) { 
    clearInterval(GInterValId); 
} 
GInterValId = setInterval(AutoRefresh, parseInt(GRefreshInterval)); 

はまた、私はたsetIntervalに文字列を渡していないよということに注意し、実際のJS関数参照。あなただけの別の間隔を防ぎたい場合は

かは、設定​​ガイド:このためにシステムを設定されてあなたが何

var GInterValId = null; // initialize 

// then, when you want to set it, check to see if it's already been set 
if (GInterValId) { 
    GInterValId = setInterval(AutoRefresh, parseInt(GRefreshInterval)); 
} 
+0

声明(GInterValId)の場合はありません{てclearTimeout(GInterValId);}複数のスレッドが同時に状態をチェックする場合は、レースの条件を作成 – Maanu

+0

全く競合状態がありません。 Javascriptには複数のスレッドがありません。シングルスレッドなので、あるスレッドは次のスレッドを実行する前に完了して実行する必要があります。 – jfriend00

+0

複数のアラートボックスが同じページに表示されています。私は複数のスレッドが同時に実行されていると仮定します – Maanu

関連する問題