Minuterie personnalisée
Minuterie personnalisée
Bonsoir à tous
Je souhaiterais prévoir un code dans mon programme qui permet de calculer le temps d'inactivation du programme avant de se fermer. Exemple si mon programme est inactif (souris+clavier non utilisés depuis un temps T), alors le programme se ferme automatiquement...
merci
Je souhaiterais prévoir un code dans mon programme qui permet de calculer le temps d'inactivation du programme avant de se fermer. Exemple si mon programme est inactif (souris+clavier non utilisés depuis un temps T), alors le programme se ferme automatiquement...
merci
Win7 (x64) 64 bits Pb 5.72
Re: Minuterie personnalisée
si c'est un programme utilisant une fenetre
Code : Tout sélectionner
OpenWindow(1,0,0,500,500,"timeout test")
timetodie=5000 ; 5 seconds
time=ElapsedMilliseconds(); derniere activité
Repeat
ev=WaitWindowEvent(timetodie)
If ev ; si un evenement est declenché
Debug "reset time"
time=ElapsedMilliseconds(); derniere activité
EndIf
Until ev=#PB_Event_CloseWindow Or ElapsedMilliseconds()-time>=timetodie ; on sort si on clic sur fermer ou si le temps ecoulé è le temps de la derniere activité >= 5 secondes
Debug " now it's time to die"
Re: Minuterie personnalisée
Mon programme contient plusieurs fenêtres. Faudra t-il mettre ça dans chaque fenêtre? Dans ton exemple, la sortie est déclenchée dans le cas où le temps dépasse les 5 secondes dans UNE FENETRE DONNEE, mais il y a aussi les autres fenêtres qui peuvent être actives au même moment....
Comment faire pour le savoir justement? (savoir si toutes les fenêtres sont inactives?)
Comment faire pour le savoir justement? (savoir si toutes les fenêtres sont inactives?)
Win7 (x64) 64 bits Pb 5.72
Re: Minuterie personnalisée
Code : Tout sélectionner
If ev ; si un evenement est declenché
Debug "reset time"
time=ElapsedMilliseconds(); derniere activité
EndIf
qu'importe l'endroit ou l'evenement est declenché.
il y a cependant un souci avec ElapsedMilliseconds() c'est que le temps renvoyé est calculé depuis le dernier redemarage de l'ordinateur et si tu ne redemarre pas l'ordinateur souvent cela peux rendre la commande imprécise/inutilisable.
du coup un code utilisant plutot la date() du systeme qui indique le nombre de secondes depuis '01/01/1970 0:00:00'
une precision max d'une seconde mais je suppose que pour ce type de besoin c'est largement sufisant
Code : Tout sélectionner
OpenWindow(1,0,0,500,500,"timeout test")
timetodie=5 ; 5 seconds
time=Date()
Repeat
ev=WaitWindowEvent(timetodie*1000) ; attend un evenement au maximum le temps defini en secondes
If ev ; si un evenement est declenché
Debug "une action a ete effectuée"
time=Date()
EndIf
Until ev=#PB_Event_CloseWindow Or Date()-time>=timetodie ; on sort si on clic sur fermer ou si le temps ecoulé è le temps de la derniere activité >= 5 secondes
Debug " now its time to die"
end
Re: Minuterie personnalisée
Les deux fonctionnent pour ça (Date() et ElapsedMilliseconds() ).case a écrit :il y a cependant un souci avec ElapsedMilliseconds() c'est que le temps renvoyé est calculé depuis le dernier redemarage de l'ordinateur et si tu ne redemarre pas l'ordinateur souvent cela peux rendre la commande imprécise/inutilisable.
ElapsedMilliseconds() retourne un quad signé. Ça fait 8 milliards de milliards de millisecondes possibles. Donc ElapsedMilliseconds() va buguer si on laisse en route l'ordinateur pendant 300 millions d'années...
Re: Minuterie personnalisée
je pense que mon souci viens du fait que je n'avais pas utilise un quad pour stocker la valeur retournée
du coup c'est moins long
Re: Minuterie personnalisée
Ah oui, si on stocke dans une variable de type Long, ElapsedMilliseconds() bugue au bout de 24 jours seulement, tandis que Date() résiste 72 ans.
(Hors-Sujet) a écrit :C'est un peu ce qui me fait flipper avec le JavaScript : ils ont des entiers complètement tordus de 48 bits, et des flottants efficaces ("significatifs") sur 52 bits. Ça semble pas repérable, comparé aux variables 32/64 bits...
Re: Minuterie personnalisée
@case
Mea culpa, ElapsedMilliseconds() semble buguer aussi sur du type quad pour une mesure de temps dépassant plusieurs semaines donc ton conseil d'utiliser la fonction Date() est... inébranlable.
Mea culpa, ElapsedMilliseconds() semble buguer aussi sur du type quad pour une mesure de temps dépassant plusieurs semaines donc ton conseil d'utiliser la fonction Date() est... inébranlable.