Pb avec la pause dans un programme

Résolu
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 - 28 févr. 2006 à 15:34
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 - 1 mars 2006 à 10:33
Bonjour à toute la communauté de développeurs :)

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?

En vous remerciant infiniment,

EvilGost [;)]

10 réponses

cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
28 févr. 2006 à 16:46
Salut,

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
3
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
28 févr. 2006 à 16:24
Salut,

Place cette ligne en haut de ton module :



Private Declare Sub Sleep Lib kernel32 (ByVal
dwMilliseconds As Long)



et tu l'utilises comme ceci dans ta procédure :



Sleep 1000 ' attend une seconde


Manu
0
cs_moustachu Messages postés 1079 Date d'inscription jeudi 14 novembre 2002 Statut Membre Dernière intervention 1 janvier 2012
28 févr. 2006 à 16:30
Bonjour

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 ?

++
Moustachu
0
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
28 févr. 2006 à 16:37
Oups ... je n'ai pas bien lu ton message. Tu veux pouvoir continuer à executer des choses pendant l'arrêt de ta procédure.

Je pense que dans ton cas, l'utilisation de Threads serait recommandée.

Manu
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
28 févr. 2006 à 16:46
http://www.freevbcode.com/ShowCode.Asp?ID=4029



Tu pourrais créer un Thread avec des procédures Start, Finish, Pause associées.

La procédure Start ferait le début de ton programme.

La procédure Finish ferait la fin de ton programme.

La procédure pause ferait une pause (avec Sleep par exemple).



Le Thread tournera en background, sans interférer avec le reste de ton programme.

Tu n'auras qu'à appeler Start, Pause et Finish à la suite l'un de l'autre.




Manu
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
28 févr. 2006 à 17:00
mélange les deux méthodes









Public Function hb_ms_sleep(milliseconds as long)
Dim attente as Long

attente = getTickCount + milliseconds
Do Until GetTickCount >= attente

Sleep 10
Doevents
Loop

End Function

Daniel
0
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
28 févr. 2006 à 18:51
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

EvilGost
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
1 mars 2006 à 10:13
Salut EvilGost,
je post un code sur CS qui portera le nom de TimerAsynchrone.
@+
Megafan
0
cs_Megafan Messages postés 389 Date d'inscription dimanche 7 avril 2002 Statut Membre Dernière intervention 23 septembre 2016 2
1 mars 2006 à 10:30
ReEvilGost,
Je n'arrive pas à poster mon code j'essaireais a nouveau demain.
@+
Megafan
0
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
1 mars 2006 à 10:33
ok, merci infiniment megafan :D

EvilGost [;)]
0
Rejoignez-nous