Double action

cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007 - 3 mars 2007 à 17:50
cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 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.

Joro

10 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 mars 2007 à 17:54
Bonjour,

Essaye d'utiliser un doevents pour laisser la main au système pendant la reccherche.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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.

ciao...
BruNews, MVP VC++
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
3 mars 2007 à 18:48
Il y a toujours le risque d'être incompris mais je le crois nettement moins nuisible qu'enfermer les gens dans des faux concepts.

A l'inverse des politiciens, essayons de tirer vers le haut.

ciao...
BruNews, MVP VC++
0

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

Posez votre question
cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007
3 mars 2007 à 18:55
Je vous remercie pour vos réponse aussi rapides.

J'ai effectivement pensé au "DoEvents".

Il est inefficace.

Une autre idée ?

Joro
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 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.

ciao...
BruNews, MVP VC++
0
cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007
3 mars 2007 à 19:06
Merci BruNews,

Je m'en doutais un peu, mais sait-on jamais.

Je pense que je vais le refaire en C++.

Joro
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
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 #
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 mars 2007 à 11:20
WM_TIMER ne sera pas plus traité qu'un autre tant qu'il n'y aura qu'un seul thread.

ciao...
BruNews, MVP VC++
0
cs_joro Messages postés 71 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 21 septembre 2007
5 mars 2007 à 14:04
Ok les gars,

Merci pour votre coopération.
Je prend de ce pas, une autre direction.

Si défois une solution existe, la question reste ouverte.

@+

Joro
0
Rejoignez-nous