Loopさせるとチェックボックスが...


GGXX  2005-07-10 08:13:07  No: 123367

チャックボックスにチェックが入ったらLoopが開始されるというプログラムを組んだんですが、これをやるとチェックボックスのチェックがはずせなくなります。
わかった方は教えてください。お願いします


ガッ  2005-07-10 08:38:52  No: 123368

なぞなぞか………………
縦読みしてもわからないので、逆に質問。
・イベント駆動プログラムを組んだことはありますか?
  {ある,ない}のいずれかで答えてください。
・DoEventsの役割を説明してください。
  簡潔に答えられれば、それで大丈夫です。

※一応ヒントだぉ…


通ってみた  2005-07-10 11:00:00  No: 123369

無限ループ?


マグ  2005-07-10 20:37:44  No: 123370

もしかして、for文の無限ループ?

色々と方法はありますが・・・・・
1、ガッさんの言うとおりの方法。
2、ループ処理にTimerを使う。
3、スレッドを使う。


GGXX  2005-07-10 22:03:37  No: 123371

返信ありがとうございました。

ない。  はじめてです
よくわからないのですが、CPUに負担をかけるとほかのイベントが実行できなくなるから、DoEventsをつかって制御を渡す。だと思ってます
DoEventsはループの初めに入れてあります。

一応  Whileを使ってLoopから出れるようにしてあるんですが、そのチェックボックスだけ動いてくれません。

Timerは使いたくないです。スレッドもわかりませんし...


通ってみた  2005-07-10 22:29:59  No: 123372

チェックボックスのクリックイベント内でチェックボックスのValueを1にしてるとかないですよねぇ・・・


ガッ  2005-07-10 22:36:37  No: 123373

> GGXX 2005/07/10(日) 13:03:37
> 返信ありがとうございました。

> ない。  はじめてです
> よくわからないのですが、CPUに負担をかけるとほかのイベントが実行できなくなるから、DoEventsをつかって制御を渡す。だと思ってます
少し(見方によっては全く)違いますが、イベントを処理するという点ではそんな感じです。
逆に言えば、DoEventsを行うことにより「発生させたくないイベント」も処理されてしまうということです。

> DoEventsはループの初めに入れてあります。
ループの初め(≠始め)というと、
[e1]ループ直前に一回ということですか?
  →"DoEvents:Do:Loop"見たいな。
    →この場合、ループ中はイベントは処理されません。VB6なら、ユーザ側から見るとビジー状態に見えます。
[e2]それとも、ループ中に一回ということですか?
  →"Do:DoEvents:Loop"
    →この場合、ループ中でもイベントを処理しますが、CPUを使いまくりです。その上、発生させたくないイベントも処理されます。

> 一応  Whileを使ってLoopから出れるようにしてあるんですが、そのチェックボックスだけ動いてくれません。
「動く」とは、何を期待しているのでしょうか?
・チェックボックスにチェックが入る
  →[e1]の場合、イベントは処理されませんので、チェックボックスの処理もされません。
  →[e2]の場合、イベントは処理されますが、「チェックボックスのイベントの処理」に「チェックボックスのイベントの処理」がされますので、
    内部では、再帰呼び出し(の様)になります。
    最悪、スタックオーバーフローが発生するかもしれません。

> Timerは使いたくないです。スレッドもわかりませんし...
なぜTimerを使いたくないのですか?
また、(.NETなら)スレッドを検討したほうがいいかもしれませんよ?


マグ  2005-07-11 01:56:38  No: 123374

無限ループでの処理はCPUを100%(限界)まで使用します。
Timerの場合は1msでCPUを10%程度で済みますが・・・・・
なぜ、Timerを使いたくないのかが分かりません。
スレッドに関しては、計ってないので、分かりません。


ねろ  2005-07-11 18:42:18  No: 123375

質問者の質問の意図は明確ですね。
フォームの上にチェックの付いていない、チェックボックスを一つ置いて
Private Sub Check1_Click()
    Do
        DoEvents
        If Check1.Value = 0 Then
            Exit Do
        Else
            'do something
        End If
    Loop
End Sub
これを実行してチェックを入れると、2度とループを抜けません。
実行がCheck1_Click()のイベント処理中は、新しいCheck1_Click()イベントが
起きない為です。従って、Check1_Click()の中では処理中に、再びチェックボックスが
クリックされる様な、時間のかかる処理は原則出来ません。
プログラムの構成を再考する必要が有ります。


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加