ようこそゲスト さん ユーザー登録 ログイン

JavaScript には Sleep や Wait のような仕組みはありません。
setTimeout 関数でブロック用のフラグを設けるくらいしか思いつきません。
正確な Wait でなくても良いのであれば、for を使うのも手でしょう

という風な感じに書かれているのですが
setTimeout 関数でブロック用のフラグというのは
どういった感じで書けばいいのでしょうか?

それとforを使うやりかたもどのように
書けばいいのか教えてくれませんか?

  • hopefully
  • 状態:終了 あなたも質問に答えられます!
  • 回答数:4 / 20件回答ポイント:80 pt
  • 登録:2007-05-17 10:14:10終了:2007-05-18 10:53:47
  • カテゴリー:就職・転職ウェブ制作

1 回答者:aside 2007-05-17 14:27:53 満足! 25ポイント

下記ソースしかできなかた

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経過");

}

質問者:hopefully 2007-05-17 14:44:35

どちらがいいですかね?

自分的にはループを使用したいのですが

永久ループにはならないですよね?

2 回答者:jack_sonic 2007-05-17 16:22:55 満足! 45ポイント

「待ち状態」と言う中で、

操作に応答しにくい状態での待ち(wait/ビジーウェイト/ループウェイト)

と、

操作に応答しやすい状態での待ち(sleep相当)

の2つがありますが、

JavaScriptの場合は、

ループを使うと、操作を受け取りにくい状態の待ち(ビジーウェイト)、

間隔の広いsetTimeout,setIntervalを使うと、操作を受け取りやすい状態での待ち(sleep相当)

というような感じに近くなります。

また、「ある条件を一定間隔で監視し、条件を満たしたら処理を起動する」といった、「条件監視sleep」も実装可能です。

サンプルソースはこちらに設置しました。

JavaScript/Sleep,Waitの実装 - ジャックズラボ jack's Lab

質問者:hopefully 2007-05-18 10:52:56

大変ありがとうございます。

3 回答者:aside 2007-05-17 16:24:29 満足! 10ポイント

特に永久ループにはならないとおもいま

質問者:hopefully 2007-05-18 10:53:10

安心しました。

ありがとうございます。

4 回答者:lunlumo 2007-05-17 22:11:30 回答オープン 10ポイント

 既に指摘されている通り,JavaScript単体sleep処理は書けません。(ビジーリードか非同期処理を用いる他無い。)負荷を掛けず,同期処理上でsleep相当の機能を実現するには,サーバ再度にsleep機能を持たせ同期指定でアクセスする,JavaAppletやFlashを使用する,等,JavaScript以外の環境の助けを借りる必要があります。以下のページにJavaAppletを使用したsleepの実装例が紹介されていますので,参考にどうぞ。

http://www.oklab.org/test/

おとなり質問

この質問・回答へのトラックバックこの質問・回答へのトラックバック

JavaScriptのタイマー処理 setTimeoutとその活用 以前id:amachangさんのブログでJavaScriptのsetTimeoutの活用方法が掲載されていたのですが、当時はいまいち意味が分かりませんでした。その補足という