• ベストアンサー

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の信号を常に監視させる

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

監視に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 といった具合です

rikky15060
質問者

お礼

どうもありがとうございました! おかげさまでプログラムも正常に動いてくれました。

その他の回答 (1)

回答No.2

↓に加えて、APIの"Sleep"で、適当に感覚をあけるといいかも知れません。

参考URL:
http://hp.vector.co.jp/authors/VA017795/vbuseful/sleep.htm
rikky15060
質問者

お礼

Sleepもとても便利な命令だなと感じました。 どうもありがとうございます!

関連するQ&A