人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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


●質問者: hopefully
●カテゴリ:就職・転職 ウェブ制作
✍キーワード:JavaScript フラグ ブロック 関数
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

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

}

◎質問者からの返答

どちらがいいですかね?

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

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


2 ● じゃっくそにっく
●45ポイント

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

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

と、

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

の2つがありますが、

JavaScriptの場合は、

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

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

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

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

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

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

◎質問者からの返答

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


3 ● aside
●10ポイント

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

◎質問者からの返答

安心しました。

ありがとうございます。


4 ● lunlumo
●10ポイント

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ