Forループ内に影響を与える方法

[戻る]
merlo 2002/04/22(月) 20:31:39
質問したいことをうまく表現できませんが,よろしくお願いします.

例えば,あるFORループがあるとします.


int flag=0;
for(i=0;i<5000;i++){
     if(flag){
           ***********************
           ***********************
     }
}

例えばリターンキーを押すとflagが1になり,
**部が実行されるようにしたいのです.

しかし,やってみたところ,forループを実行中は
パソコンが忙しいみたいで,リターンキーの命令を
受け付けてくれるのは,そのループが終わった時に
なってしまうのです.

では,具体的に何を目的としているのかと
思われるのでご説明します.

学校の研究室では,このほど高速度カメラ(1/1000[s])の
購入を決定しました.しかし,このカメラは撮影した映像を
膨大なJPEGとして出力するので,連続してJPEGを表示する
アプリケーションをMFCのダイアログベースで作成しました.
しかし,ビデオデッキ等をご想像されるとわかりやすいかと
思われますが,

再生→うまくできます,つまりForループを実行すればいいのですから

停止→ボタンを押して命令を出しても,forループが忙しく無視されます.

あ,この方がわかりやすいかも.

for(i=0;i<1000;i++){
     if(flag)  GOTO L300;
     
     ****
}
L300:;

ボタン押したら,ループを脱出するとか.

よろしくお願いします.

dairygoods 2002/04/22(月) 21:32:19
for (...) {
  if (GetKeyState(VK_RETURN)<0) 
    break;
  ***
}
とか。

merlo 2002/04/22(月) 21:54:33
さっそくやってみます.
レスありがとうございます

merlo 2002/04/22(月) 22:16:02
やってみましたが,おもうように動作しませんでした.

中級者X 2002/04/22(月) 22:30:46
お手軽な方法としては、PeekMessageで過去ログなどを検索してみましょう。
あとはスレッド。

merlo 2002/04/22(月) 23:29:15
[[解決]]
自己解決しました.
再生スピードも変えられるようにと
OnTimer関数を利用したら,
あっけなく解決できました.

forは処理がCPUの限界(?)ぐらいなのでしょうか.
まったくわかりませぬが,とにかくForは速いですよね.

PeekMessageに関して,ご指摘の後,検索させていただきました.
同様な目的をもった新規スレッド設立者がたくさんいて,且つ
非常に親切なレスも数多く掲載されていたので,
今後のためにも非常に参考になりそうです.

それらのスレッドをすべてこれからプリントアウトさせて
いただきます.

ご指摘いただいたdairygoods 様,中級者X 様
ありがとうございました.

駄犬 [E-Mail] 2002/04/23(火) 14:25:06
> forは処理がCPUの限界(?)ぐらいなのでしょうか.
通常、WindowsのようなプリエンプティブなマルチタスクOSの管理下においては、限界というこ
とではありません。試しに無限ループにしてみてください。それでもアプリケーションの切替や
マウスカーソルの移動等はできるはずです。

> まったくわかりませぬが,とにかくForは速いですよね.
計測したことはありませんが、例えば1000回の何もしないループならマイクロ秒(あるいはそ
れ以下)の世界でしょうね。

古いスレッドには追加発言できません。