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
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
MENEKRE, tu connais?
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
En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
(ALEXANDRE DUMAS)
N'hésitez pas à visiter ma page de contributions
Je l'ai ajoutée mais cela ne change rien.
MENEKRE, tu connais?
tu peux nous montrer ton code qui boucle ?
Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
Vous trouvez une reponse particulierement utile ? Votez pour !
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
MENEKRE, tu connais?
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 ?
Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
Vous trouvez une reponse particulierement utile ? Votez pour !
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
MENEKRE, tu connais?
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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...
Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
Vous trouvez une reponse particulierement utile ? Votez pour !
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 : Sélectionner tout - Visualiser dans une fenêtre à part Sleep 120000 'une pause de 2 minutes
En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
(ALEXANDRE DUMAS)
N'hésitez pas à visiter ma page de contributions
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 )
Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
Vous trouvez une reponse particulierement utile ? Votez pour !
Merci pr vos contributions.
Je vais regarder du coté des timers déjà si j'ai des questions je reviens.
Merci
MENEKRE, tu connais?
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager