03. Timers
timersオブジェクトは、タイマ機能を提供する組み込みオブジェクトです。
機能概要:
- ワンショットタイマと周期タイマを提供します。
制限事項:
- 同時に使用可能なタイマリソースは5本です。
- リソースエラーは例外発生要因となります。
timers Global Object
本オブジェクトに関しては、インスタンス名'timers'
は省略可能です。
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
setTimeout() | ワンショットタイマの起動をします。 | 00.00.15+ | {Timeout}が生成されます。 |
clearTimeout() | ワンショットタイマの停止をします。 | 00.00.15+ | |
setInterval() | 周期タイマの起動をします。 | 00.00.15+ | {Timeout}が生成されます。 |
clearInterval() | 周期タイマの停止をします。 | 00.00.15+ | |
insertDelay() | 指定された時間の遅延を挿入します。 | 01.03.01+ |
Details
setTimeout([callback,]delay)
ワンショットタイマの起動をします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
callback() | function | optional | タイムアウト発生時にコールバック処理を実行します。 | |
delay | number | mandatory | タイムアウトするまでの時間[ms]を指定します。 設定範囲: 1~4,294,967,295 | 超過値は最大値として扱われます。 タイマは1msから指定可能ですが、内部処理遅延によりブレが発生します。ブレを見越した設計を行い、評価した上でご使用ください。 |
return | {Timeout} | - | {Timeout} : 生成された{Timeout} | 異常が発生した時は、例外となります。 |
clearTimeout(timeout)
ワンショットタイマの停止をします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
timeout | {Timeout} | mandatory | setTimeout()によって生成された{Timeout}オブジェクト | nullが指定された場合は、無視されます。 |
return | undefined | - | - |
setInterval(callback,delay)
周期タイマの起動をします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
callback() | function | mandatory | タイムアウト発生時にコールバック処理を実行します。 | |
delay | number | mandatory | タイムアウトするまでの時間[ms]を指定します。 設定範囲: 1~4,294,967,295 | 超過値は最大値として扱われます。 タイマは1msから指定可能ですが、内部処理遅延によりブレが発生します。ブレを見越した設計を行い、評価した上でご使用ください。 |
return | {Timeout} | - | {Timeout} : 生成された{Timeout} | 異常が発生した時は、例外となります。 |
clearInterval(timeout)
周期タイマの停止をします。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
timeout | {Timeout} | mandatory | setInterval()によって生成された{Timeout}オブジェクト | nullが指定された場合は、無視されます。 |
return | undefined | - | - |
insertDelay(delay)
指定された時間の遅延を挿入します。
その際、全ての処理が一時的に完全ブロックされます。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
delay | number | mandatory | 遅延時間[ms]を指定します。 設定範囲: 1~100 | タイマは1msから指定可能ですが、内部処理遅延によりブレが発生します。ブレを見越した設計を行い、評価した上でご使用ください。 |
return | undefined | - | - | 異常が発生した時は、例外となります。 |
使用例です。
insertDelay(10); //10msec wait
{Timeout}
本オブジェクトは、setTimeout()/setInterval()により内部で生成され、返却されます。
Methods()/Properties | Summary | Version | Note |
---|---|---|---|
.wait() | タイマリソース解放までウェイト(ブロック)します。 | 00.00.15+ |
Details
.wait()
タイマが非活性化しリソース解放されるまで、ウェイト(ブロック)します。
このメソッドは、コールバック関数を指定して作成された{Timeout}オブジェクトのコールバック処理の中で使用しないでください。
又、setInterval()により生成された{Timeout}オブジェクトでは本メソッドを使用しないでください。
Name | Type | M/O | Summary | Note |
---|---|---|---|---|
return | undefined | - |
使用例です。
setTimeout(1000).wait(); //1sec wait
本メソッドは、タイマリソースの解放までブロッキングします。
タイマのON/OFFを連続的に繰り返す場合は、同時に使用しているタイマの本数が許容本数を超え、例外が発生する場合があります。
以下は極端な例ですが連続的にタイマのONとOFFを繰り返すような場合、本メソッドを挿入することでこの問題を回避可能です。
while(1) {
tmo = setTimeout(function() { print('timeout!'); }, 30000);
clearTimeout(tmo);
tmo.wait();
}
オブジェクトの使用例
Sample 1
ワンショットタイマ、周期タイマのサンプルです。
1秒の周期タイマを起動し、タイマ満了毎に’Hello JS World’を出力します。
最後に、15秒ウェイトし、先の周期タイマを停止します。
var tmo = setTimeout(function() {
print('timeout!');
}, 5000);
var tocnt = 0;
var tmobj = setInterval(function() {
print('Hello JS World:' + tocnt++);
}, 1000);
setTimeout(15000).wait();
clearInterval(tmobj);
print('Good see you later!');
Sample 2
周期タイマのサンプルです。
1秒の周期タイマを起動し、満了毎にワンショットタイマを再起動します。
var cbFlag = 0;
var tmOne = null;
var tmInterval = setInterval(function() {
if(tmOne && cbFlag == 0) {
print('clear one-shot timer');
cbFlag = 1;
}
}, 1000);
while(1) {
if(cbFlag) {
tmOne.wait();
tmOne = null;
cbFlag = 0;
}
if(!tmOne) {
print('start one-shot timer');
tmOne = setTimeout(function() {
print('timeout!');
}, 1000);
}
}
Updated: 2020-11-04