Faire fonctionner un Timer pendant un temps précis

Résolu
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009 - 14 mai 2009 à 19:10
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...

19 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 19:58
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).
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 19:35
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é
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
14 mai 2009 à 19:44
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
14 mai 2009 à 19:50
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
0

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

Posez votre question
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 20:01
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)
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
14 mai 2009 à 21:29
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
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
14 mai 2009 à 22:02
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
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 22:14
Une valeur négative pour quelle variable ? (pas de devins, ici !!!)
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 22:20
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)"
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
14 mai 2009 à 22:22
pour la variable b  ... comme dit dans mon premier post

merci
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 22:28
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à ...
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
14 mai 2009 à 22:49
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
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 22:58
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 ...
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
14 mai 2009 à 23:16
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....
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
14 mai 2009 à 23:29
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
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
15 mai 2009 à 00:02
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...
0
gaudreaua Messages postés 32 Date d'inscription jeudi 7 mai 2009 Statut Membre Dernière intervention 15 mai 2009
15 mai 2009 à 02:30
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..
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 71
15 mai 2009 à 07:07
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.
0
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
Sincèrement merci pour tout...
0