timeSetEventでEXE実行時に無限ループ

解決


ハナクソース  2004-01-05 16:37:28  No: 111054  IP: [192.*.*.*]

APIのtimeSetEvent関数を使用し、一定時間待ち合わせるという処理を作ったのですが、EXEで実行した場合に無限ループになってしまいます。
VBから実行する場合はちゃんとできるのですが…

↓↓↓こんな感じのソースです↓↓↓


Private Sub WaitTime(Interval As Long)

    Dim lngResult As Long

    '秒→ミリ秒
    Interval = Interval * 1000


    ' タイマイベントを開始
    gTimerId = _
        timeSetEvent( _
            Interval, _
            0, _
            AddressOf TimeProc, _
            0, _
            TIME_PERIODIC)
    
    'タイマイベントが発生するまでWAIT(空ループ)

    Do While (gTimerId <> 0)
                              →→ここで無限ループになってしまいます。    
                              でも、ここに、デバッグ用の処理を入れたら、
                              EXE実行でも無限ループにはなりませんでした

                              ’デバッグ用に入れてみた処理
                            FRM_P21G1010.Text1 = gTimerId
                            FRM_P21G1010.Refresh


    Loop

    lngResult = timeKillEvent(gTimerId)

End Sub

'Interval分時間が経過し、タイマイベントが発生したら、ココが実行される
Function TimeProc _
       (ByVal uID As Long, _
        ByVal uMsg As Long, _
        ByVal dwUser As Long, _
        ByVal dw1 As Long, _
        ByVal dw2 As Long) As Long
    
    gTimerId = 0
    
End Function

編集 削除
ハナクソース  2004-01-05 16:49:59  No: 111055  IP: [192.*.*.*]

あ、すいません。ちなみに開発環境はVB6です。
そして、いまデバッグしてみたところ、TIMERイベント自体が発生していないようです。

どなたかよろしくお願いしますm(__)m

編集 削除
ar  2004-01-05 17:18:19  No: 111056  IP: [192.*.*.*]

本題とはずれるかもしれませんが。

>    lngResult = timeKillEvent(gTimerId)

この部分ですが、Whileを抜ける時にgTimerIdの値は0のはずですよね?
ちゃんと timeSetEvent()で取得した値を使わないと駄目な気がします。

編集 削除
ハナクソース  2004-01-05 18:01:14  No: 111057  IP: [192.*.*.*]

ありがとうございます。
無限ループは、空ループの中に「DOEVENTS」
を記述することで解決できました。

でも今度は、イベント間隔がたまにおかしい…  っていうのがありまして。
たぶんarさんのご指摘のとこが原因じゃないかと思います。やってみます〜☆

編集 削除
特攻隊長まるるう  2004-01-05 18:09:46  No: 111058  IP: [192.*.*.*]

第2引数も『システム・オーバーヘッドを縮小するために
適切な値を使用するべきです』とかヘルプに書いてあるから
0(ms)より1(ms)くらいの方がいいかもね(?)

編集 削除
ハナクソース  2004-01-07 10:34:09  No: 111059  IP: [192.*.*.*]

おそくなりました。
いろいろとやってみて、解決しました。
ありがとうございます。

編集 削除
 2004-01-07 15:28:41  No: 111060  IP: [192.*.*.*]

いろいろやった内容を書いておくと他の人が見たとき
役に立つと思いますのでよろしくおねがいします。

編集 削除