Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Vous avez dit bizarre ? | |
| | Auteur | Message |
---|
jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Vous avez dit bizarre ? Lun 5 Sep 2022 - 20:35 | |
| En programmant avec un timer, j'ai trouvé un truc étrange : D'abord, j'utilise le timer à 1000 : (pour qu'il se déclenche toutes les secondes) - Code:
-
rem ' Essai timer 1000 dim V1M% , V2M% V2M%=60 label clic , time
progress_bar 410 left 410,100 top 410,50 width 410,150 height 410,30 min 410,0 max 410,100 button 450 left 450,100 top 450,150 width 450,150 caption 450,"Commencer" on_click 450,clic timer 550 : rem Pour faire marcher la barre de progression timer_interval 550,1000 on_timer 550,time timer_off 550 end
clic: timer_on 550 return
time: : rem Mise en action du timer if V2M%>0 V1M%=V1M%+1 position 410,(V1M%/V2M%)*100 if V1M%=>V2M% timer_off 550 position 410,0 beep end_if else timer_off 550 end_if return
Le progress-bar est programmé pour se terminer en 60 secondes. Je chronomètre : il met 61 secondes (environ) Cette différence est peut-être déjà significative ? Pour des raisons d'utilisation différente du timer, je le règle à 50 (donc 20 fois par seconde) (je divise donc par 20 pour obtenir le même résultat) Voir le code ci-dessous : - Code:
-
rem ' Essai timer 50 dim V1M% , V2M% V2M%=60 label clic , time
progress_bar 410 left 410,100 top 410,50 width 410,150 height 410,30 min 410,0 max 410,100 button 450 left 450,100 top 450,150 width 450,150 caption 450,"Commencer" on_click 450,clic timer 550 : rem Pour faire marcher la barre de progression timer_interval 550,50 on_timer 550,time timer_off 550 end
clic: timer_on 550 return
time: : rem Mise en action du timer if V2M%>0 V1M%=V1M%+1 if (V1M%/20)=int(V1M%/20) : ' ======================= position 410,((V1M%/20)/V2M%)*100 : ' ----------------- ' V1M%=V1M%+4 : ' ========================= if int(V1M%/20)=>V2M% : ' --------------------- timer_off 550 position 410,0 beep end_if end_if : ' ============================ else timer_off 550 end_if return
les ligne roses simples indiquent des modifications les lignes roses doubles ont été carrément ajoutées Je chronomètre : il met 76 secondes pour faire la même chose !!! J'ai fait une erreur de calcul ou le timer a un pet au casque ? C'est une histoire à s'arracher les cheveux ! Alors j'ai trouvé un truc (mais alors vraiment un truc) c'est d'ajouter : V1M%=V1M%+4 (ligne 37) et ça se remet à fonctionner à peu près correctement. Mais il faut quand même admettre que la méthode fait bricolo-bancal ! Alors, si quelqu'un y comprend quelque chose... et trouve mieux... (Allez, place aux grosses poitures) | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Vous avez dit bizarre ? Lun 5 Sep 2022 - 21:22 | |
| Bonsoir Jjn4, Bon c'est vrai que les timers dans Panoramic c'est pas ce qui se fait de mieux... PS : j'ai édité le code à plusieurs reprise en incluant un calcul du temps à la fin. Il y a juste 1 minute ! J'ai mis la position sur un écart de 2 car cela donne un chiffre rond mais après tu peux choisir ton écart comme tu veux... voila comment je procéderai : - Code:
-
rem ' Essai timer 1000 dim t$ label clic , time
progress_bar 410 left 410,100 top 410,50 width 410,150 height 410,30 min 410,0 max 410,100 button 450 left 450,100 top 450,150 width 450,150 caption 450,"Commencer" on_click 450,clic timer 550 : rem Pour faire marcher la barre de progression timer_interval 550,1200 : ' 60000/50 (60000 c'est les millisecondes et 50 c'est le nbre de positions du progress_bar) on_timer 550,time timer_off 550 end
clic: INACTIVE 450 timer_on 550 t$=time$ return
time: : rem Mise en action du timer if position(410)=98 timer_off 550 position 410,0 ACTIVE 450 beep MESSAGE "Début : "+t$+CHR$(13)+"Fin : "+time$ else position 410,position(410)+2 end_if return
| |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Vous avez dit bizarre ? Lun 5 Sep 2022 - 21:51 | |
| Bonsoir les Amis !
Si vous souhaitez de la précision, il est préférable d'utiliser NUMBER_TICKS au lieu d'un TIMER. | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Vous avez dit bizarre ? Mar 6 Sep 2022 - 14:40 | |
| Merci de vos réponses à tous. @Minibug: Solution astucieuse, mais j'ai besoin que le timer reste à un intervalle de 50, parce que j'en ai besoin pour autre chose. C'est le nombre d'interruptions, qui doit varier, pas leur durée : pour une minute : 60 positions du progress-bar pour une minute et demie : 90 positions du progresse_bar etc... Je conserve donc ma solution bricolage (qui, après tout, n'est pas si mal que ça) Mais je ne savais pas que le timer était aussi imprécis (je pensais qu'il s'agissait d'un processus d'interruption fonctionnant pile-poil, comme le papier à musique). | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Vous avez dit bizarre ? Mar 6 Sep 2022 - 15:32 | |
| Bonjour Jjn4
Un intervalle de 50ms sur le timer me semble très court ! Ca veut dire que tu appelles 20 fois la routine par seconde...
Je ne sais pas ce que tu compte faire dans cet intervalle mais le traitement risque de rentrer un conflit avec l'appel répété du timer. D'où peut être le problème rencontré...
Après comme le disait Marc tu peux calculer l'intervalle avec NUMBER_TICKS. A toi de voir... | |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Vous avez dit bizarre ? Mar 6 Sep 2022 - 15:37 | |
| Il s'agit de faire qu'une image se balade, et avec un intervalle de 1 seconde, cela fait informatique des années 80... D'où le 50 millième qui la fait se balader d'1 pixel tous les 50/1000 de seconde. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Vous avez dit bizarre ? Mar 6 Sep 2022 - 15:51 | |
| Voilà ce que je propose avec le fonction NUMBER_TICKS : - Code:
-
rem ' Essai timer 1000 dim debut% , ecart% , t$ label clic , time
progress_bar 410 left 410,100 top 410,50 width 410,150 height 410,30 min 410,0 max 410,100 button 450 left 450,100 top 450,150 width 450,150 caption 450,"Commencer" on_click 450,clic timer 550 : rem Pour faire marcher la barre de progression timer_interval 550,50 on_timer 550,time timer_off 550 end
clic: INACTIVE 450 timer_on 550 debut%=NUMBER_TICKS return
time: : rem Mise en action du timer ecart%=(NUMBER_TICKS-debut%)/1000 position 410,(ecart%/60*100) : CAPTION 0,ecart%
if position(410)=100 timer_off 550 position 410,0 ACTIVE 450 beep end_if return
| |
| | | jjn4
Nombre de messages : 2747 Date d'inscription : 13/09/2009
| Sujet: Re: Vous avez dit bizarre ? Mer 7 Sep 2022 - 10:52 | |
| Superbe, Minibug, et merci ! Là, effectivement, c'est vraiment pile poil ! Impeccable ! | |
| | | Contenu sponsorisé
| Sujet: Re: Vous avez dit bizarre ? | |
| |
| | | | Vous avez dit bizarre ? | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |