PAUSA EM UM PROCESSAMENTO
Boa tarde!
Como faço para fazer uma pausa no processamento de um programa em vb 6.
Como faço para fazer uma pausa no processamento de um programa em vb 6.
Nossa...essa faz tempo
DoEvents combinando com alguma condição booleana talvez ?
DoEvents combinando com alguma condição booleana talvez ?
Colega,
O WEBMASTER indicou o DoEvents, mas este é para liberar o sistema operacional, em casos em que um label não atualiza na tela, por exemplo.
DoEvents é bom usar dentro de loops.
Para pausar programa em VB6 existe uma chamada API, que eu tenho em sistemas legados, e é permitido parar somente o sistema ou todo o computador, mas não estou com ela agora.
Alternativamente você pode usar algo nativo do VB6, que é a função Sleep N, onde N é um número em milesegundos, por exemplo Sleep 5000 para fazer uma pausa de 5 segundos.
O WEBMASTER indicou o DoEvents, mas este é para liberar o sistema operacional, em casos em que um label não atualiza na tela, por exemplo.
DoEvents é bom usar dentro de loops.
Para pausar programa em VB6 existe uma chamada API, que eu tenho em sistemas legados, e é permitido parar somente o sistema ou todo o computador, mas não estou com ela agora.
Alternativamente você pode usar algo nativo do VB6, que é a função Sleep N, onde N é um número em milesegundos, por exemplo Sleep 5000 para fazer uma pausa de 5 segundos.
Alterado em 11/11/2024 15:17:08
O problema da API Sleep ela faz com que o sistema literalmente dorme, ou seja, ela vai congelar o sistema provocando um congelamento em todos os eventos e a próxima linha de código no seu aplicativo até que o período Sleep tenha expirado.
Declare Function timeBeginPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long '???????
Declare Function CreateWaitableTimerW Lib "kernel32.dll" (Optional ByVal lpTimerAttributes As Long, Optional ByVal bManualReset As Long, Optional ByVal lpTimerName As Long) As Long
Declare Function SetWaitableTimer Lib "kernel32.dll" (ByVal hTimer As Long, ByRef pDueTime As Currency, Optional ByVal lPeriod As Long, Optional ByVal pfnCompletionRoutine As Long, Optional ByVal lpArgToCompletionRoutine As Long, Optional ByVal fResume As Long) As Long
Declare Function MsgWaitForMultipleObjects Lib "user32.dll" (ByVal nCount As Long, ByRef pHandles As Long, ByVal bWaitAll As Long, ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long
Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Public Const INFINITE As Long = -1&, QS_ALLINPUT As Long = &H4FF&
Sub Pause(ByVal Milliseconds As Currency)
Dim hTimer As Long
hTimer = CreateWaitableTimerW
Call SetWaitableTimer(hTimer, CCur(-Milliseconds))
Do While MsgWaitForMultipleObjects(1&, hTimer, 0&, INFINITE, QS_ALLINPUT)
DoEvents
Loop
CloseHandle hTimer
End Sub
Precisão de 100 nanossegundos, precisão de 0,0001 milissegundo ...
Editado: Créditos ao chines Xiao Yao do VBForums.
Declare Function timeBeginPeriod Lib "winmm.dll" (ByVal uPeriod As Long) As Long '???????
Declare Function CreateWaitableTimerW Lib "kernel32.dll" (Optional ByVal lpTimerAttributes As Long, Optional ByVal bManualReset As Long, Optional ByVal lpTimerName As Long) As Long
Declare Function SetWaitableTimer Lib "kernel32.dll" (ByVal hTimer As Long, ByRef pDueTime As Currency, Optional ByVal lPeriod As Long, Optional ByVal pfnCompletionRoutine As Long, Optional ByVal lpArgToCompletionRoutine As Long, Optional ByVal fResume As Long) As Long
Declare Function MsgWaitForMultipleObjects Lib "user32.dll" (ByVal nCount As Long, ByRef pHandles As Long, ByVal bWaitAll As Long, ByVal dwMilliseconds As Long, ByVal dwWakeMask As Long) As Long
Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Public Const INFINITE As Long = -1&, QS_ALLINPUT As Long = &H4FF&
Sub Pause(ByVal Milliseconds As Currency)
Dim hTimer As Long
hTimer = CreateWaitableTimerW
Call SetWaitableTimer(hTimer, CCur(-Milliseconds))
Do While MsgWaitForMultipleObjects(1&, hTimer, 0&, INFINITE, QS_ALLINPUT)
DoEvents
Loop
CloseHandle hTimer
End Sub
Precisão de 100 nanossegundos, precisão de 0,0001 milissegundo ...
Editado: Créditos ao chines Xiao Yao do VBForums.
função Sleep
' Declare a função Sleep da biblioteca kernel32
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
' Exemplo de uso
Sub PausarPrograma()
MsgBox "Início da pausa"
Sleep 5000 ' Pausa de 5 segundos (5000 milissegundos)
MsgBox "Fim da pausa"
End Sub
método DoEvents em um loop com contagem de tempo
Sub PausarComDoEvents()
Dim startTime As Single
startTime = Timer ' Captura o horário atual em segundos
' Pausa de 5 segundos
Do While Timer < startTime + 5
DoEvents ' Permite que outros eventos do sistema sejam processados
Loop
MsgBox "Fim da pausa"
End Sub
' Declare a função Sleep da biblioteca kernel32
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
' Exemplo de uso
Sub PausarPrograma()
MsgBox "Início da pausa"
Sleep 5000 ' Pausa de 5 segundos (5000 milissegundos)
MsgBox "Fim da pausa"
End Sub
método DoEvents em um loop com contagem de tempo
Sub PausarComDoEvents()
Dim startTime As Single
startTime = Timer ' Captura o horário atual em segundos
' Pausa de 5 segundos
Do While Timer < startTime + 5
DoEvents ' Permite que outros eventos do sistema sejam processados
Loop
MsgBox "Fim da pausa"
End Sub
Fabricio, seu segundo metodo (wait) é melhor.
Faça seu login para responder