ウェイト命令がない

一時、処理を待つ命令が無い。

文字とかゆっくり表示とか、 そういう所では全速力で処理してもらっては困るんです。 適度に処理を待って欲しいです。

そういう時は、タイマーコントロール。

しかし、タイマーコントロール、うまくいきませんでした・・ 腕が未熟で出来なかっただけかもしれませんが。

タイマーコントロールは一定時間おきにイベントを発生させる命令です。
これ使えないかなぁって思ったのですが・・。 一回タイマーコントロールのイベントを発生させて、 次のイベント発生までをウェイトとしようとしたのですが、上手く行かない。

それなら原始的に、空ループ?

MSXの時はFor〜Nextの空ループをやっていましたから、 これでタイミングが取れないものかと、思っていました。・・が、 Windowsマシンは処理速度がそれぞれ違う。ループカウンタの値どうしよう・・。

VisualBasicで出来ない事は、Windows.API

VBで出来ない事は、APIでします。 APIでウェイトを取れるのです。

GetTickCount

GetTickCountという命令があります。 これはWindowsが起動してからの時間を返すAPIです。 これを使って、ウェイト時間まで待てば良いです。Do Loop等使ってループしながら待ちます。

GetTickCountの使用例

宣言
Declare Function GetTickCount Lib "kernel32.dll" () As Long

使用例

Sub Wait(TT As Long)    'TT=待機時間(msec)
'ウェイト
  Dim T1 As Long, T2 As Long
  T1 = GetTickCount()     
  Do Until T2 - T1 >= TT  '待機時間になるまでループします。
        T2 = GetTickCount() 
        DoEvents            '待ち時間に他の事をする場合要ります。
  Loop                    
End Sub

追記。
動作環境によってはGetTickCountやSleepは失敗する可能性があるみたいです。 動作環境に依存するのはWindowsの宿命かもしれない・・。 GetTickCountよりtimeGetTimeが良いようです。使い方は同じです。

ちなみにSleepで失敗は未確認。あ、SleepExで回避出来る、かも? いずれにせよ私は良く知らないので気にしない方が良いかもしれません。 バグったと聞いたから使わなかっただけです。

GetTickCountは失敗したケースを身近で見てます。 timeGetTimeもごく稀に(確率低し)失敗するかも。 これは滅多に見られません。