戻り値が来るまで待つのに最適な方法は?


駆け出しPG  2004-02-19 04:12:53  No: 111889  IP: [192.*.*.*]

do〜loop内にdoeventsを入れて、処理中にもほかの処理を出来るようにしているのですが、
doeventsでループするのは、PCの時間が遅れたりするなど弊害が発生するとどこかのMLで昔見た記憶がありました。

ループ内でほかのルーチンの戻り値が発生するのを待つのに、doeventsを使わないほかの良い方法をご存知でしたら、
どなたか教えてください。


環境  WinXP Pro /Win2000 VB6全パッチ適用済み

編集    削除
Say  2004-02-19 07:24:02  No: 111890  IP: [192.*.*.*]

タイマ監視するとか、メッセージ拾うとか・・・。

ま、たとえば隠しTextBoxを1つ用意して、
「ほかのルーチン」は終了時にそこに何かかきこんで、
終了後の処理をChangeイベントプロシージャに書くとか。

編集    削除
ねろ  2004-02-19 17:02:22  No: 111891  IP: [192.*.*.*]

DoEventsを使わないプログラムは私には考えられない。
たとえばあるテキストボックスに8桁のパスワードを
入れなければ次に進まないプログラムの場合
Do
    DoEvents
Loop Until Len(Text1.Text) >= 8
こんなコードになるのですが、これを他の方法でやろうとすると
結構大変です。
やってはいけないのは、たとえばListBoxに大量のデーターを
書き込もうとして
For n = 0 To 10000
    List1.AddItem CStr(n)
    DoEvents
Next
なんてやると一個挿入するたびに、WindowsはListBoxに描画しようとするから
時間が掛かる、こう言うときは
For n = 0 To 10000
    List1.AddItem CStr(n)
    If (n Mod 100) = 0 Then
        DoEvents
    End If
Next
なんてやってDoEventsの回数を100回挿入したら一回行う様なことをします。
要するに'ハサミ'と一緒と言うことですか。

編集    削除