cs_joro
Messages postés71Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention21 septembre 2007
-
3 mars 2007 à 17:50
cs_joro
Messages postés71Date d'inscriptionvendredi 24 janvier 2003StatutMembreDernière intervention21 septembre 2007
-
5 mars 2007 à 14:04
Bonjour,
Dans mon projet, j'ai une feuille principale et une feuille d'attente.
La feuille d'attente me permet d'afficher un message pour faire patienter, avec une petite animation, gérée par un timer.
A un moment, à partir de ma feuille principale, je scanne le réseau par un "dir" tel que "Fichier = Dir([file://\\50.21.26.30\Cft\logcharge.txt \\50.21.26.30\Cft\logcharge.txt])".
En attente du résultat, je fait afficher ma feuille d'attente avec ma petite animation qui fonctionne bien au départ, puis se fige le temps de la recherche sur le réseau.
Est-ce-que quelqu'un aurait la solution pour que mon animation se perpétue jusqu'à la fin de la recherche ?
Nota : J'ai pour l'instant une solution batarde.
J'ai supprimé ma feuille d'attente du programe principal, et j'ai fait un programme unique pour le message que j'appelle à partir de mon programme principal. Le problème, c'est que j'ai 2 exécutables au lieu d'un.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 mars 2007 à 18:33
"laisser la main au système"
Il y a comme ça de ces phrases qu'on trouve partout sur le web mais qui sont pourtant erronées.
Le système a toujours la main sur un prog user mode, c'est ce dernier s'il est fautif de ne pas traiter les messages que le système empile dans son thread principal que le système finira par expulser.
Se résumerait en:
Essaie d'utiliser un DoEvents pour traiter les messages du système pendant la recherche.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 3 mars 2007 à 18:43
Bonjour Brunews,
C'est vrai, tu as tout-è-fait raison de corriger l'expression.
J'ai préféré utiliser la mienne, même inexacte, car elle évitait de définir (joro est apparemment un débutant) ce que sont les messages du système.
N'aurait-il pas risqué de réagir en disantn par exemple, "mais je n'attends aucun message... c'est juste que mon animation se fige ) . J'ai donc préféré éviter...
A moins que joro ne soit un débutant sous VB mais un connaisseur suffisamment averti hors VB
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 mars 2007 à 19:00
Il y avait effectivement de grandes chances que les temps entre les DoEvents soient trop long. Les fonctions de parcours réseau sont parfois très longues à retourner.
Les recherches réseau se font toujours dans un thread séparé mais en VB6 impossible, voila une bonne raison pour migrer vers un langage plus moderne.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 5 mars 2007 à 11:09
Effectivement, le DoEvents ne peut que etre inéfficace. Le blocage viens de la recherche réseau qui peut prendre du temps. Cela se traduit en VB6 par l'instruction Dir qui prend le temps necessaire pour s'executée. Cette instruction étant bloquante, le programme attend qu'elle soit fini pour reprendre la main.
Mettre un DoEvents avant ou après l'instruction Dir, revient à executer le DoEvents avant ou après la recherche, mais pas pendant.
La solution est de mettre le rafraichissement de l'animation dans un thread séparé, chose impossible en VB6 (c'est possible, mais tellement casse-gueule et instable, qu'il vaut mieux la considérer impossible).
Cependant tu peut peut-etre essayer d'utiliser un thread séparé de manière déguisée en laissant tomber le timer de VB et tenter de mettre en place un timer système à l'aide des api windows (normalement il devrait etre executer dans un thread séparé). Je ne sais pas si c'est possible et si ça résoudrait le problème.
---- Sevyc64 (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #