Module extérieur: pb de synchronisation

Résolu
cs_jacques13 Messages postés 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 juin 2013 - 14 févr. 2008 à 19:25
cs_jacques13 Messages postés 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 juin 2013 - 15 févr. 2008 à 18:22
Bonjour,
J'ai un problème de synchronisation lors du retour d'un module extérieur.
J'explique:
A partir de mon programme principal, je fais appel à un module Trick:
RetVal = Shell(MyPath + "\Trick.exe " + PremiersParametres$, 0)
qui fait son traitement et, en fin d'exécution, repasse des paramètres au programme principal dans le fichier toto.txt
Pour tenter de synchroniser les opérations, j'introduis une boucle DoEvents centrée sur l'existence de toto.txt:
While Not Exist("toto.txt"): ret = DoEvents: Wend
Puis, au sortir de cette boucle, j'enchaîne le traitement de mon programme principal.
Malheureusement mon dispositif fonctionne de manière aléatoire, parfois il sort de la boucle et poursuit son exécution alors que le fichier toto.txt n'a pas encore été créé!!!
Quelqu'un verrait-il une solution?
Merci pour votre aide.
Jacques13

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
14 févr. 2008 à 21:17
Salut
Ton problème est normal puisque ton fichier peut exister sans pour autant avoir de données à l'intérieur (laps de temps court)
Oui, il faut utiliser l'API WaitForSingleObject qui, couplée à la commande Shell, bloquera ton programme pendant tout le temps où ton EXE externe est en cours de Run. Il ne te rendra la main qu'une fois que Trick aura disparu des process.
Voir des exemples parmi les questions du forum, pami les sources du site ou dans les exemples associés à cette API dans AIP-Guide (programme gratuit d'aide à l'utilisation des APIs) dispo à <cette adresse>

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 févr. 2008 à 10:40
un lien que je fournis quotidiennement sur le forum...



http://www.vbfrance.com/codes/SHELLANDWAIT-EXECUTER-APPLICATION-ATTENDRE-FIN-RENVOYER-SON-CODE_34867.aspx




Renfield





Admin CodeS-SourceS

- MVP Visual Basic
0
cs_jacques13 Messages postés 252 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 29 juin 2013
15 févr. 2008 à 18:22
Merci à Jack et Renfield,
Avec l'API WaitForSingleObject la situation est parfaitement débloquée.
Jacques13
0
Rejoignez-nous