JavaScript には Sleep や Wait のような仕組みはありません。
setTimeout 関数でブロック用のフラグを設けるくらいしか思いつきません。
正確な Wait でなくても良いのであれば、for を使うのも手でしょう
という風な感じに書かれているのですが
setTimeout 関数でブロック用のフラグというのは
どういった感じで書けばいいのでしょうか?
それとforを使うやりかたもどのように
書けばいいのか教えてくれませんか?
下記ソースしかできなかた
alert("開始");
//1秒ウェイト
_sleep(1000);
alert("1s経過");
//2秒ウェイト
sleep(2000);
//ループ使用
function _sleep(time){
var d1 = new Date().getTime();
var d2 = new Date().getTime();
while( d2 < d1 + time ){
d2=new Date().getTime();
}
return;
}
// settimeout使用
function sleep(time){
setTimeout(after, time);
}
function after(){
alert("2s経過");
}
どちらがいいですかね?
自分的にはループを使用したいのですが
永久ループにはならないですよね?
2 回答者:jack_sonic 2007-05-17 16:22:55 満足! 45ポイント
「待ち状態」と言う中で、
①操作に応答しにくい状態での待ち(wait/ビジーウェイト/ループウェイト)
と、
②操作に応答しやすい状態での待ち(sleep相当)
の2つがありますが、
JavaScriptの場合は、
ループを使うと、操作を受け取りにくい状態の待ち(ビジーウェイト)、
間隔の広いsetTimeout,setIntervalを使うと、操作を受け取りやすい状態での待ち(sleep相当)
というような感じに近くなります。
また、「ある条件を一定間隔で監視し、条件を満たしたら処理を起動する」といった、「条件監視sleep」も実装可能です。
サンプルソースはこちらに設置しました。
大変ありがとうございます。
既に指摘されている通り,JavaScript単体sleep処理は書けません。(ビジーリードか非同期処理を用いる他無い。)負荷を掛けず,同期処理上でsleep相当の機能を実現するには,サーバ再度にsleep機能を持たせ同期指定でアクセスする,JavaAppletやFlashを使用する,等,JavaScript以外の環境の助けを借りる必要があります。以下のページにJavaAppletを使用したsleepの実装例が紹介されていますので,参考にどうぞ。