このページの詳細は
http://playing.ddo.jp/contents/VB6/index.php
に移動しました.m(_ _)m
*******************************
プログラムであるメソッドを1時間ごとに起動しようと思い指定時間待機するためのクラスを作成しました。
似たようなことはSleep関数で出来ますが、
VB6でSleep関数を使うと、プログラムがフリーズしたようになる問題がでます。
無限ループを起こして指定時間を待機させる方法を試しましたが、メモリ使用率が100%になってしまい問題です。
またTimer関数を使用したプログラムは、
日付変更時に問題が生じます。
以下のプログラムにより、1日以上でも一定時間ごとにプログラムを動作させることができ、また、プログラムのフリーズも起こりません。
参考にどうぞ。
'-- 宣言の追加
-------------------------------------------'
Public Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As
Long)
Public Declare Function
GetForegroundWindow Lib "user32" () As Long
Public Declare Function
timeGetTime Lib "winmm.dll" () As Long
'-- クラスはここから
-------------------------------------------'
Public Sub StopTime(st As
Single)
Dim sngSt As Single
sngSt = timeGetTime
Do While (timeGetTime - sngSt) / 1000 <
st
Sleep (10) '10ミリ秒待機
'** ラベルに現在時刻を表示
**********************'
Label1.Caption = Format$(Date,
"yyyy年mm月dd日 ") & Format$(Time, "hh時mm分ss秒")
sngSt)
DoEvents
Loop
End Sub
※timeGetTimeはシステム起動時からの時間を返しますが、
Timerは0時0分からの時刻を秒で返します。そのため、Timerでは日付変更時に0に戻ります。そのため、
指定時間待機させるプログラムではtimeGetTimeを使用しました。
※Sleep関数は待機中に全ての動作を止めてしまうため、
フリーズと同様の状態になります。Sleepを10ミリ秒と小さくし細かく待機させることで、
フリーズを解除しボタンなどを使用可能にしております。
posted by くろやん at 2007年08月08日
|
Comment(0)
|
TrackBack(0)
|
♪ VB6.0