Bonjour,
j'ai une application qui tourne en fond de tache continuellement.
Le problème c'est que je ne peux pas cliquer sur le bouton "Quitter", l'application se plante.
Quelqu'un peut m'aider?
Merci
Version imprimable
Bonjour,
j'ai une application qui tourne en fond de tache continuellement.
Le problème c'est que je ne peux pas cliquer sur le bouton "Quitter", l'application se plante.
Quelqu'un peut m'aider?
Merci
Dans la boucle, mettre quelquepart, l'instruction DoEvents
Comme cette instruction est gourmande te temps d'exécution, il peut être interessant de mettre un mecanisme en place pour ne l'executer que toutes les x itérations
Je l'ai ajoutée mais cela ne change rien.
tu peux nous montrer ton code qui boucle ?
Je ne voudrais pas en rajouter une couche, OhMonBato s'en charge fort bien sur quasiment tous les messages mais quand même... encore un prototype du post en bois, sans une ligne de code, ni explication autre que "J'ai un problème".
Malgré cela, les mêmes âmes charitables essayent de dépatouiller l'utilisateur par un : "Dans la boucle, mettre quelquepart, l'instruction DoEvents" mais soyons sérieux 2 minutes...
RELISEZ les recommandations !
1000 excuses.
Vous avez parfaitement raison
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 If CStr(Format(Time, "hhmmss")) > Trim(PeriodeClt1) And CStr(Format(Time, "hhmmss")) < Trim(PeriodeClt2) Then If Pause = 1 Then TxtFic.BackColor = vbRed TxtCpt.BackColor = vbRed DoEvents Sleep 120000 'une pause de 2 minutes DoEvents TxtFic.BackColor = vbWhite TxtCpt.BackColor = vbWhite DoEvents Clt_Auto Else TxtFic.BackColor = vbWhite TxtCpt.BackColor = vbWhite DoEvents Clt_Auto End If End If
J'imagine que Clt_Auto est une sub ? Que se passe t'il dans cette sub ?
tu peux nous donner des exemples de valeurs que prennent PeriodeClt1 et PeriodeClt2 ? Vu que tu compare des chaines de caractères...
Est-ce là l'intégralité de ta boucle ? Si oui on est bien d'accord, c'est un Do...Loop ?
Oui Clt_Auto est une sub. Elle ne fait que des MAJ dans une table.
Periodeclt1=210000
Periodeclt2=230000
Oui c'est l'intégralité de ma boucle
Donc tout le temps ou ton test sur l'heure n'est pas valide (j'imagine la plupart du temps), il se passe ça :
Dis moi où est le DoEvents dans tout ça ?Code:
1
2
3
4
5
6
7 Do If CStr(Format(Time, "hhmmss")) > Trim(PeriodeClt1) And CStr(Format(Time, "hhmmss")) < Trim(PeriodeClt2) Then 'Rien puisque ce n'est pas la bonne heure End If Loop
Connais tu l'exécution pas à pas ? tu mets ton programme en Pause et tu appuis sur F8...
Cette instruction
n'est pas une instruction VB, c'est une api windows. On demade à windows de nous mettre en sommeil pendant 2 minutes. Et, comme il est tres bète, c'est excatement ce qu'il fait. N'espere pas que ton programme tourne/réagisse pendant ces deux minutes.Code:Sleep 120000 'une pause de 2 minutes
exactement.
L'api sleep ne permet pas l'obtention de ressources CPU en parallèle (pas de multi thread sous vb ;)) en conséquence de quoi il va te falloir gérer applicativement un wait de 2 minutes.
Par exemple (en lieu et place de ton slip 12000)
Pour te laisser profiter efficacement du topic, j'ai volontairement oublié de faire figurer une instruction.Code:
1
2
3
4
5
6
7
8
9 dim dblNow as double dim dblTimer as double [...] dblNow = CDbl(Now) dblTimer = 0 while dblTimer < 120 dblTimer = CDbl(Now) - dblNow wend [...]
Bon courage,
Seb
Pis histoire d'en remettre une petite couche, je me disais quand même que, à mois que tu ais besoin de vérifier toutes les millisecondes l'heure par rapport aux limites fixées par PeriodeClt1 et PeriodeClt2, plutôt que de faire une boucle qui tourne sans arrêt, tu pourrais avoir un timer qui une fois toutes les 5 ou 10 secondes (ou plus ou moins) irait vérifier ta condition (même si c'est toutes les secondes, ce sera déjà moins lourd que cette boucle infernale ;) )
Merci pr vos contributions.
Je vais regarder du coté des timers déjà si j'ai des questions je reviens.
Merci
Exemple d'utilisation d'un Timer pour effectuer une barre de chargement...
Ludique comme exemple, il fait bien comprendre le princie du timer je pense...
Cordialement