J'ai un petit problème avec une fonction de pause que j'ai pris sur VBfrance, la voici:
Public Function hb_ms_sleep(milliseconds as long)
Dim attente as Long
attente = getTickCount + milliseconds
Do Until GetTickCount >= attente
Doevents
Loop
End Function
Le seul problème, c'est que j'utilise hb_ms_sleep(300000) qui est effectue une pause de 300000 millisecondes tout en permettant à l'utilisateur de garder la main sur le programme, et que l'utilisation du processeur monte à 98%, ce qui est assez problématique...
N'y aurait-il pas une autre solution, autre que l'utilisation d'un objet Timer, pour permettre une pause dans un programme tout en gardant la main?
Il y a t-il une différence entre le sleep (qui ne permet pas de garder la main) et le sleepex?
Tu peux utiliser les API CreateTimerQueue et CreateTimerQueueTimer.
Tu as un super exemple sur Allapi.net (http://www.mentalis.org/index2.shtml)
Timer non bloquant (pas comme sleep) et n'utilsant pas de ressource.
C'est t'y pas beau la vie !
@+
Megafan
Ce dont je me souviens, c'est que Sleepex te permet de faire une pause selon une durée donnée ou l'exécution d'une fonction. Tu ne récupères pas la main avec sleepex non plus je crois.
Pourquoi as tu besoin de cette pause, sans indiscrétions ?
En fait, je me sers d'une pause lorsqu'une base de données access n'est pas accessible, je fais donc une pause de 5 minutes avant de retester son accès, mais ca bouffe de l'utilisation CPU Moustachu.
Pour le Thread, ca m'a l'air un peu complexe, je cherche quelque chose de plus simple, mais merci à econs pour cette idée.
Gobillot, le sleep ne change pas grand chose malheureusement, il est beaucoup trop court pour ne pas solliciter le cpu.
Quant à megafan, je cherche à créuser ton idée, mais j'aurai besoin de ton aide, j'ai bien déclaré toutes les api,
je fais un createqueuetimer de 200 000 millisecondes, ca me recupére le handle du timer mais je ne vois pas comment m'en servir pour que ca effectue une pause...peux-tu m'aider?
code:
Public Function hb_ms_sleep(milliseconds As Long)
hQueue = CreateTimerQueue()
If hTimer = 0 Then
CreateTimerQueueTimer hTimer, hQueue, AddressOf TimerCallBack, ByVal 0&, 0, milliseconds, 0
End If
End Function
Public Sub TimerCallBack(ByVal lpParameter As Long, ByVal TimerOrWaitFired As Long)
Debug.Print "Timer callback..."
End Sub