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

解決


ハナクソース  2004-01-06 01:37:28  No: 111054

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-06 01:49:59  No: 111055

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

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


ar  2004-01-06 02:18:19  No: 111056

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

>    lngResult = timeKillEvent(gTimerId)

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


ハナクソース  2004-01-06 03:01:14  No: 111057

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

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


特攻隊長まるるう  2004-01-06 03:09:46  No: 111058

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


ハナクソース  2004-01-07 19:34:09  No: 111059

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


  2004-01-08 00:28:41  No: 111060

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


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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