Faire fonctionner un Timer pendant un temps précis [Résolu]

Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
- - Dernière réponse : gaudreaua
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
- 15 mai 2009 à 14:49
Bonjour,

je travaille avec un timer. je comprends bien qu'il boucle à tous les ... (selon le .interval que je lui donne en milliseconde)

Ce que j'aimerais c'est lui dire que tourner pendant 30 secondes puis exit sub. Est-ce possible ?

J'ai essayer cela mais... vous comprendrez sûrement que le i se met à zéro à chaque tour donc il n'arrête jamais...

i = 0

If i = 300 Then
    Exit Sub
Else
emissionPort ("ZEA " & no_port)
attente (0.05)
buffer = Form2.MSComm1.Input

X2 = 600 + i * Interval
Y2 = 6600 - Val(buffer) * 6.1

imggraph1.Line (X1, Y1)-(X2, Y2)

X1 = X2
Y1 = Y2
i = i + 1
End If

merci de votre précieuse aide...
Afficher la suite 

19 réponses

Meilleure réponse
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
3
Merci
Il me semble que j'ai été très clair, pourtant (à condition que celui qui me lit ne se contente pas d'ouvrir le bec et d'attendre la becquetée !)...
Si tu te lances dans le développement, tu seras très vite confronté à mille fois plus complexe que ce petit amusement !!!

Un exemple, alors (et fais un effort d'analyse et de compréhension de ce mécanisme, hein ...)

Un projet (tout neuf) avec un label label1 et un timer timer1

Private Sub Form_Activate()
  Timer1.Interval = 1
  Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
 Static couic As Date If couic 0 Then couic Now
 Label1.Caption = Now
 If DateDiff("s", couic, Now) > 10 Then
   couic = 0
   Timer1.Enabled = False
 End If
End Sub

Lance et observe .... (ne nécessite aucune espèce de commentaire).

Dire « Merci » 3

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

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

Commenter la réponse de jmf0
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Bonjour,

- on arrête un timer non par exit sub mais par sa propriété enabled
- une boucle avec i dans un timer n'a pas vraiment de sens !
- un timer n'étant jamis très précis, il est préférable de compter sa durée de fonctionnement non en nombre de battements multiplié par l'intervalle, mais, en lieu et place :
- de se servir d'une variable static (on y met l'heure au départ et on arrête le timer lorsque l'heure actuelle dépasse de plus de x secondes l'heure de départ)...
Tout cela est de la plus grande simplicité
Commenter la réponse de jmf0
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
Je comprends bien ce que tu dis... mais je ne vois pas comment je vais l'appliquer...

Quand je clique sur un bouton commande

1- le compte ou décompte de 30 sec débute
2- pendant ce temps j'utilise un timer pour récupérer des valeurs sur le port comm toutes les 100 milliseconde

je veux qu'il s'arrête timer.enabled = false quand le 30 seconde est écoulé

je ne comprends pas bien comment utiliser l'heure?

tu serais aimable de pousser tes explications un peu plus loin pour le débutant que je suis.

Merci
Commenter la réponse de gaudreaua
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
Private sub Timer1_Timer()
Static nStartTime As Long
If nStartTime = 0 Then
nStartTime = Timer
ElseIf Timer = nStartTime+30 Then
Timer1.Enabled = False
Else
'# emission port.....
End If
End Sub
Commenter la réponse de Renfield
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Bonjour Renfield,

- Tu m'as doublé pendant que ma fille me souhaitait un bon anniversaire !
- j'ai préféré choisir Now pour éviter un éventuel chevauchement de dates (défaut de la fonction Timer)
Commenter la réponse de jmf0
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
Merci messieur...

et ce n'est pas faute de me creuser la tête ou de chercher du tout fait... mais comme je débute en vb ce n'est pas les concepts qui m'échappe, je comprends très bien ce qu'il faut faire mais je n'arrive pas à les mettre en place car je ne connais pas les fonctions....

je ne savais pas qu'il y avait le fonction de date et heure  et je ne savais pas non plus ce qu'était une variable static..

Parfois les Pros oublient que le newbies ne connaissent pas la moitié des fonctions qui existent....

Bon votre solution fonctionne et merci encore
et Joyeux anniversaire jmf0
Commenter la réponse de gaudreaua
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
Bonjour les spécialiste du Timer...

dans mon appli je dois récupérer le temps auquel j'ai récupérer ma valeur sur le port comm ... en utilisant mes nouvelles connaissance que j'ai apprises de vous, j'ai produit ce qui suit.... voici mon problème parfois j'obtiens une valeur de b négative.... comment cela est-ce possible ??? avez-vous des solutions.???

static tps_lect As Long
If tps_lect 0 Then tps_lect Timer

b = Timer - tps_lect
emissionPort ("ZEA " & no_port)
buffer = Form2.MSComm1.Input

x1 = x2
y1 = y2
x2 = 600 + (b * Interval)
y2 = 6600 - (Val(buffer) * 6.1)

If x1 <> 0 Then imggraph1.Line (x1, y1)-(x2, y2)

If b > duree Then
    Timer3.Enabled = False
    start = 0
    tps_lect = 0
 
 End If
Commenter la réponse de gaudreaua
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Une valeur négative pour quelle variable ? (pas de devins, ici !!!)
Commenter la réponse de jmf0
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Attends ... (je vois que tu es au Canada) ...

relis ce que j'ai écrit plus haut à l'intention de RenField :

"- j'ai préféré choisir Now pour éviter un éventuel chevauchement de dates (défaut de la fonction Timer)"
Commenter la réponse de jmf0
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
pour la variable b  ... comme dit dans mon premier post

merci
Commenter la réponse de gaudreaua
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Alors ?
La fonction Timer te renvoit le nombre de secondes écoulées depuis minuit.
Il est clair que dans le cas d'un chevauchement de jours entre les deux mesures, la 2ème sera alors plus petite que la première et alors :
la_deuxième moins la_première sera négative ...
Raison pour laquelle j'ai (revoiis donc mon exemple) choisi d'utiliser la Fonction Now plutôt que la fonction Timer ...
Fais-en autant et tu n'auras plus de valeur négative, pardi !
Voilà ...
Commenter la réponse de jmf0
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
Je n'ai pas utilisé la fonction now car elle a la précision de la seconde alors que timer a une présicion au centième de seconde

je récupère plusieurs lectures sur le port comm à l'intérieur d'une seconde

je ne comprends pas comment

static start as long
if start 0 then start timer

b= timer - start

peut donner une valeur négative (autre que près de minuit) je le teste et j'obtiens parfois un b négatif

le contexte d'utilisation a peut être une importance c'est pour cela que j'ai mis tout le timer dans le post précédent...

mon timer est sur un interval de 1 milliseconde

merci
Commenter la réponse de gaudreaua
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
1) typé en long, start ne peut te retourner des décimales !
2) quiel que soit son type : timer - start ne peut être < 0 que si Timer < start (et cela ne peut arriver que si start a été défini avant minuit et que Timer - start est calculé après minuit ... (c'est clair !)

Tu vux mesurer plus finement qu'en secondes ? C'est possible avec la onction GetTickCount de l'Api de Windows, mais je n'ose même pas t'en parler compte tenu du niveau que tu as et des difficultés que tu montres à "manipuler" et comprendre du plus simple ...
Pardonne-moi et bonne chance ...
Commenter la réponse de jmf0
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Juste une dernière chose :

L'utilisation de la fonction Timer pour mesurer au 1/100ème de seconde n'est pas fiable ...
Démonstration :

Private Sub Command1_Click()
  Dim debut As Double
  debut = Timer
  Do While Timer < debut + 0.01
  Loop
  MsgBox debut & vbCrLf & Timer
End Sub

Clique plusieurs fois et constate par toi-même les résultats ...plutôt inconstants....
Commenter la réponse de jmf0
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
tu vois je fais ce que tu me disais ce matin... j'essaie de comprendre ... alors attention à tes comentaire...

mon idée était bonne mais le dédutant en moi a fait une erreur de typage de la variable start.

et comment je suis supposé savoir que le 1/100 de seconde du timer n'est pas précis.

je vais creuser GetTickCount de l'Api de Windows. a moins que tu ais d'autres idées

merci et bonne  fin de journée
Commenter la réponse de gaudreaua
Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
3
0
Merci
Alors et très calmement :

"et comment je suis supposé savoir que le 1/100 de seconde du timer n'est pas précis"
- Ce n'est pas "le" Timer (qui est un contrôle VB) , qu'utilise ta variable start, mais la fonction Timer (qui est autre chose).
- ouvre (surtout si tu es débutant) ton aide en ligne (elle est faite pour cela et même les plus avertis et les plus avancés l'ouvrent plusieurs fois par jour) et lis ce qui est dit à propos de la fonction Timer (VB t'explique qu'elle mesure des secondes et ne fais aucune allusion à des 100èmes de seconde)
- il t'est toujours loisible, lorsque tu as un doute, de faire un petit test... celui que j'ai fait est un exemple de précaution...

- en ce qui concerne les typages : leur compréhension est absolument indispensable et doit être l'un des tout premiers pas à faire avec assurance !
En résumé et très amicalement : ne te lance pas dans le développement tête baissée si tu ne veux pas te cogner contre un mur. L'aide en ligne existe pour être lue avec la plus grande attention (au moins en ce qui concerne certains points fondamentaux). Je n'ai eu qu'elle à mon époque (pas de web ===>> pas de forums, pas de profs ==>> pas de cours, etc... ===>> donc absolument tout seul + cette précieuse aide en ligne). J'ose à peine te dire (ne le prends pas mal, hein...) que ces questions de base ont été assimilées en moins de 48 heures...
Commenter la réponse de jmf0
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
salut,

t'as raison, je vais chercher davantage sur l'aide en ligne.... mais avec toute les ressources web pourquoi s'en priver...

Pour ce qui est du temps ça fait pas plus de 72 hrs que je fais du vb... j'apprends assez vite.... j'ai déjà progressé énormément depuis ce matin.

Merci pour ton aide... et a mon prochain problème..
Commenter la réponse de gaudreaua
Messages postés
17283
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
56
0
Merci
fichtre, que de posts...

"t'as raison, je vais chercher davantage sur l'aide en ligne.... mais avec toute les ressources web pourquoi s'en priver..."

Si les resources web en question c'est nous, je prefere autant que tu cherche un brin par toi même.

utilises la touche F2, pour savoir ce que VB peut te proposer
utilises l'aide en ligne, si tu as des questions de compréhension de prolemes de bases
utilises le forum. beaucoup de questions ont dejà été posées. Trouver les bon termes de recherche montre une onne analyse de ton probleme

et là seulement, tu poses une question...


Ne vas pas considérer que l'on dénigre les débutants. Ca fourmille ici. Les gens auraient tourné les talons si c'était le cas.
Je sais donc par experience que c'est les mains dans le code, et dans google, parfois que tu apprendra vraiment.
Commenter la réponse de Renfield
Messages postés
32
Date d'inscription
jeudi 7 mai 2009
Statut
Membre
Dernière intervention
15 mai 2009
0
Merci
Sincèrement merci pour tout...
Commenter la réponse de gaudreaua