- ベストアンサー
Loopとフリーズ
数ヶ月前からVBを始め、プログラムを組んでいる者です。 VB6.0を使用しています。 I/0ボードを用いてロボットの信号を受け取れるような環境を作りました。 『Do Until~Loop』処理で、信号を監視させているのですが、 プログラムを実行させるとCPU=100%になり、フリーズします。 『Do Until~Loop』処理の代わりになるような処理はないでしょうか? 以下に少し詳しく書き込んでおきますので、 よろしくお願いします。 信号Aは1(ON)と0(OFF)のどちらかの信号を常に出しています。 (タイミングは機械が制御しています) 信号Bも1(ON)と0(OFF)のどちらかの信号を常に出しています。 (タイミングはランダムです) <目的> 信号Aが1のとき、信号Bの信号を受け取り、 信号Aが0のとき、信号Bの信号は受け取りません。 <アルゴリズム> (1)信号Aが1になるまで『Do Until~Loop』処理を行う 待機させる (2)信号Aが0になるまで『Do Until~Loop』処理を行う その処理の中で、信号Bの信号を常に監視させる
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
監視にDo-Loop構文を使っても構いませんがWindowsのメッセージループを止めない工夫をするようにしましょう メッセージループとは ボタンのクリックやウィンドウの再描画などOSが処理している部分です ループ中に DoEventsめっそどを適宜実行するようにしてみましょう たとえば 10回ループを回ったら1回DoEventsを実行するようにするとか dim nCnt as Integer nCnt = 0 Do Until 終了条件 監視処理 nCnt = nCnt + 1 if nCnt > 10 then DoEvents nCnt = 0 end if loop といった具合です
その他の回答 (1)
- khazad-lefty
- ベストアンサー率44% (296/668)
↓に加えて、APIの"Sleep"で、適当に感覚をあけるといいかも知れません。
お礼
Sleepもとても便利な命令だなと感じました。 どうもありがとうございます!
お礼
どうもありがとうございました! おかげさまでプログラムも正常に動いてくれました。