1つのファンクションの中で3つのまとまりの処理を行っています。
便宜上処理A,処理B,処理Cとします。
A処理は普通に処理します。
B処理では部分的に処理待ちを行いたい。
C処理は、B処理が終わってから処理を行いたい。
現在は、B処理のメソッドの中でsetTimeoutを使用して処理待ちを行っています。が、言うまでもないことですが、このままではB処理を待たずにC処理を行ってしまいます。
それではと、C処理のグループをファンクションにしてしまい、そのファンクションの呼び出しをB処理の待ち時間と同じかそれより少し長く待つようにすれば実現すると思うのですが、あまりにも美しくないと思っています。
純粋に処理を待つという処理をしたいと思っています。
昔はfor文でぶん回すという方法もありましたがCPUを使いすぎるのでやりたくありません。
何かうまい方法はありませんでしょうか。
よろしくお願いします。
No.7
- 回答日時:
「一定時間処理を中断する方法」は、sleep(n)さえあればそれで解決なんでしょうけど、あいにくjavascriptには無いので、setTimeout()で実現させるわけです。
その実装例は#1さんが早くに提示されているのに『何故まだ問答が続くんだろう?』と思ってしまいます。
で、setTimeout()代用策で妥協できないとしたら、その理由は一つ。
「待っている間、他のイベント処理を実行させたくない」
ということですね。
この大切な要件を質問者さんが書かないから、話が堂々巡りになっているのではないですか?
もしそうだとしての回答は、setTimeout()を待つ間は、
document.body.style.cursor = "wait";
document.body.disabled = true;
で画面を無効化すると良いのでは。
この回答への補足
ちょっと今回の具体例を前提にすると誤解を生じさせそうなので、「一定時間処理を中断する方法は?」という質問に変更させていただきたいと思います。よろしくお願いします。
補足日時:2006/01/22 20:52No.6
- 回答日時:
考え方次第だと思いますが、フローから考えれば
単純に作業Bに作業Cをつなげるだけなので、
前後関係があるものはすべてfunctionを介して
ひとくくりの作業だと考えればすみますよね?
<script language="javascript">
alert("作業A")
tid=setTimeout("x()",1000)
function x(){
alert("作業B")
alert("作業C")
}
</script>
この回答への補足
ちょっと今回の具体例を前提にすると誤解を生じさせそうなので、「一定時間処理を中断する方法は?」という質問に変更させていただきたいと思います。よろしくお願いします。
補足日時:2006/01/22 17:53No.4
- 回答日時:
何度もすいません。
ようやく意図がはっきり理解できましたので。で、Javascriptではご存知のようにwaitやsleepに相当するものはないし、手軽に使えるwaitを作り出す事も不可能なようです。
「javascript wait関数」で検索してみるみなさんの苦労の跡がうかがえますが、結局はBLUEPIXYさんの回答のように書き方の工夫でなんとかしているようです。
No.3
- 回答日時:
なんか中途半端な回答が続いてすいませんが。
A処理、B処理の結果を見るには一度Javascriptパーサから開放される必要がありますので、別関数化してタイマー系のメソッドで再度呼び出すとかイベントの発生で呼び出される必要があると思います。
No.2
- 回答日時:
Cを別の関数(function)にしてBの終了時にCを呼び出せばいいように思えたんですが違うんでしょうか?
また、「処理待ち」とは具体的に何を待っているのでしょうか?
この回答への補足
>また、「処理待ち」とは具体的に何を待っているのでしょうか?
処理を一定時間中断することです。
setTimeoutは正確には一定時間後に指定処理を行うだけであり、処理自体の中断はしませんよね。
すなわち、B処理の中でsetTimeoutを行ってもその処理が終了する前にC処理が走ってしまうのです。
ちょっと今回の具体例を前提にすると誤解を生じさせそうなので、「一定時間処理を中断する方法は?」という質問に変更させていただきたいと思います。よろしくお願いします。
No.1
- 回答日時:
var TimeoutID;
var stat=0;
function ABCfunc(){
switch(stat){
case 0:
//A処理
//B処理の途中まで
stat=1;
TimeoutID=setTimeout('ABCfunc()',10000);//10秒待つ
break;
case 1:
clearTimeout(TimeoutID);//Timeout解除
//B処理再開
//C処理
stat=0;
break;
}
}
----------------------------------------------------------------
試してませんが、上記みたいな感じでできるかと思います。
この回答への補足
いろいろ書きすぎて、かつ希望が不明確でした。すみません。
質問と希望は
>純粋に処理を待つという処理をしたい
という一言に尽きます。
wait関数を作りたいということです。
こんな感じかなーと思って作ってみました。
が、現在無限ループ中です…
function wait(w) {
// 読み込み待ち
t = 0;
while(t < w) {
setTimeout("t = t + 100", 100);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルVBA マクロ処理中のポップアップメッセージについて 1 2023/08/04 21:34
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- C言語・C++・C# C言語:数値の桁数指定についての質問です。 8 2022/05/26 23:53
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- CPU・メモリ・マザーボード PコアとEコアの使い分け 3 2023/07/30 22:09
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
- Visual Basic(VBA) vbaエクセルマクロについて RemoveDuplicatesを使わずに、重複行を削除すらマクロを作 3 2023/03/02 22:03
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- SEX・性行為 えちえちのときの陰毛処理について質問です! 彼女がvio剃っていないと嫌ですか?毛量などは減らしたり 7 2023/02/06 20:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面系イベントの優先度を上げたい
-
Javaでのデバッグコード削除
-
tryの終了
-
doGetとdoPostの違い
-
java(swing)で、登録ボタンを押...
-
Javaアプリケーション実行の返...
-
onBlurとonFocusの処理順序につ...
-
PHPでDB処理中にプログレスバー...
-
C# PostMessage BeginInvok
-
重い処理を行っているとGIFアニ...
-
JAVAからJAVASCRIPT関数を呼び出し
-
「UIスレッド」「マルチスレッ...
-
C#で別スレッドの終了を知りたい
-
WPF C#でF10のイベント取得方法...
-
巡回バッファを使用した生産者-...
-
重たい処理のタイムアウト強制終了
-
MediaPlayerコントロールのイベ...
-
ラジオボタンの選択判定
-
Linux上でのTomcatのServletプ...
-
javaのプログラムが止まる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
Tomcat高負荷時の設定について
-
onBlurとonFocusの処理順序につ...
-
Javaでのデバッグコード削除
-
ラジオボタンの選択判定
-
WPF C#でF10のイベント取得方法...
-
doGetとdoPostの違い
-
SwingUtilities.invokeLater(ne...
-
アコーディオンメニューをアン...
-
数値の定数を付ける時
-
switch文の中に、throws new Ex...
-
JAVAからJAVASCRIPT関数を呼び出し
-
再度、スレッドが実行中かどう...
-
ラベルの表示までが異常に遅い...
-
JavaScriptからJAVAクラスを呼...
-
javaのプログラムが止まる
-
Javaプログラムからポップアッ...
-
C#で別スレッドの終了を知りたい
-
vba Sleep関数について教えてく...
-
Tomcatのスレッドを破棄する方法
おすすめ情報