Pb avec la pause dans un programme [Résolu]

Signaler
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
-
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
-
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

Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 152 internautes nous ont dit merci ce mois-ci

Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
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
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

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
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
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
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
22
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
Messages postés
3140
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
11 mars 2019
28
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
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
2
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
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
Salut EvilGost,
je post un code sur CS qui portera le nom de TimerAsynchrone.
@+
Megafan
Messages postés
389
Date d'inscription
dimanche 7 avril 2002
Statut
Membre
Dernière intervention
23 septembre 2016
2
ReEvilGost,
Je n'arrive pas à poster mon code j'essaireais a nouveau demain.
@+
Megafan
Messages postés
235
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
16 mai 2011
2
ok, merci infiniment megafan :D

EvilGost [;)]