|
|
|
|
|
Dicas
|
|
Visual Basic (Miscelâneas)
|
|
|
Título da Dica: Controlando o tempo em loops
|
|
|
|
Postada em 3/9/2003 por Ð@®l@n
Inicialmente poderia parecer complicado fazer com que um determinado loop rode exatamente por um determinado periodo de tempo (segundos ou algo menor que isso), mas utilizando algumas funções da API do windows podemos obter esse resultado. Veja:
#If Win32 Then Private Declare Function GetTickCount _ Lib "kernel32" () As Long #Else Private Declare Function GetTickCount _ Lib "User" () As Long #End If
Essa função, GetTickCount, nos fornece um número que funciona quase que como um timer. Utilizando uma função que nos dê a diferença entre 2 chamadas de GetTickCount chegamos ao resultado desejado. Veja a função :
Public Function TickDiff( _ ByVal TickStart As Currency, _ ByVal TickEnd As Currency) As Long
' CCur(2 ^ 32) Const TwoToThe32nd As Currency = 4294967296@
' Handle two's complement for values larger than ' 2147483647& If TickStart < 0 Then TickStart = TickStart + TwoToThe32nd End If ' Handle two's complement AND the case where ' timeGetTime/GetTickCount wraps at (2 ^ 32)ms, ' or ~49.7 days: If (TickEnd < 0) Or (TickEnd < TickStart) Then TickEnd = TickEnd + TwoToThe32nd End If ' Return the result TickDiff = TickEnd - TickStart End Function
Agora veja como utiliza-la :
Public Sub SampleLoop() Dim TickStart As Currency TickStart = GetTickCount() ' Loop for 5 seconds Do While TickDiff(TickStart, GetTickCount()) _ < 5000 ' loop code here Loop End Sub
Primeiramente foi pego na variável TickStart o valor de GetTickCount. O loop então é feito com base no resultado da função TickDiff : Quando a diferença entre o start e o GetTickCount atual for maior que 5000 (5 segundos) o loop para.
|
|
|
|
|