アプリ版:「スタンプのみでお礼する」機能のリリースについて

数ヶ月前から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の信号を常に監視させる

A 回答 (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

といった具合です
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/23 10:02

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



参考URL:http://hp.vector.co.jp/authors/VA017795/vbuseful …
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/01/23 10:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!