Forum Liberty Basic France

Général » Question sur "Run" Attendre la fin du"Run" avant de continuer...
Le 23/11/2017 à 16h25

Libertynaute Débutant

Groupe: Membre

Inscrit le: 22/09/2015
Messages: 12
Bonjour !

Quand on emploie une instruction "Run", est-il possible d'attendre que le programme qui tourne sous "Run" soit fermé avant que le programme LB ne continue ?

Par exemple :
run "command.com /k "+DefaultDir$+"\sort1.bat",MINIMIZE
J'ai absolument besoin que le tri (sort1.bat) soit terminé avant de continuer le programme LB.

J'ai essayé avec
run "command.com /k "+DefaultDir$+"\sort1.bat",MINIMIZE
call pause 1000 ' (ou plus si nécessaire)
mais "pause" s'exécute évidemment pendant "sort1.bat", et ça le ralentit fortement... Ca ne résoud rien.

Donc j'ai fait ceci :
run "command.com /k "+DefaultDir$+"\sort1.bat",MINIMIZE
notice "Done !"
... et j'attends un peu avant de cliquer sur "Done" :-))

Mais ça n'est pas très élégant... Je ne vois pas de paramètre adéquat pour "Run". Peut-être aller voir dans #user32.dll ou ailleurs pour savoir quels sont les programmes actifs à un moment donné, mais là je suis dépassé...

Avez-vous résolu ce problème ?

Merci et bonne après-midi.

1180michel

   
Le 23/11/2017 à 17h14

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1992
Ce que tu veux faire n'est pas évident, il faudrait que le bat renvoie une info en fin de parcours.
Si tu peux écrire dans un fichier depuis le bat; tu peux interroger périodiquement le fichier (ouvrir-interroger-fermer-pause-réouvrir...ext) (ou sans pause puisque le bat tourne à part) et quand l'info est présente c'est que le tri est fini.
Je ne vois pas trop comment faire autrement
Tu peux poser la question chez les anglophones il y en a de très forts.
http://justbasic.conforums.com/index.cgi

http://libertybasic.conforums.com/index.cgi
____________________
Roro

   
Le 24/11/2017 à 11h31

Libertynaute Débutant

Groupe: Membre

Inscrit le: 22/09/2015
Messages: 12
OK, merci je vais aller voir chez les angliches...

J'avais essayé le coup du fichier écrit/lu simultanément par les deux programmes, mais ça ne semblait pas (bien) marcher... En tous cas, j'ai abandonné.

Bonne journée, je vous tiens au courant si j'ai un tuyau !

   
Le 24/11/2017 à 17h41

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1992
Pour le fichier, je l'ai essayé et ça marche sous deux conditions:
- Il faut mettre des pauses entre les fermeture--ouvertures en lecture (pour laisser le temps au .bat d'ouvrir d'écrire et de refermer).
- Il faut faire l'écriture en boucle pour provoquer une coincidence "pause lecture-écriture".
Se pose le problème d'arrêter la boucle d'écriture qui peut être faite pendant un temps donné
supérieur au temps "lecture + pause".
____________________
Roro

   
Le 17/01/2018 à 16h27

Libertynaute Débutant

Groupe: Membre

Inscrit le: 22/09/2015
Messages: 12
Taïaut taïaut !
Voici une solution "pointue" qui semble marcher avec les fichiers .exe (pas avec les .txt...) :

sub waitprogram prog$
re=-1
while re=-1
calldll #kernel32,"_lopen",prog$ as ptr,1 as long,re as long
wend
calldll #kernel32,"_lclose",re as long,re as long
end sub

Ca se passe comme ça : on essaie d'ouvrir le fichier en question (_lopen). S'il est déjà ouvert, ça renvoie -1, sinon, on reçoit le handle du fichier. Il faut alors absolument le refermer (_lclose) !

J'ai trouvé une source assez fabuleuse de renseignements sur les API, ça s'appelle API-guide :
http://www.allapi.net/cgi-bin/redirect.cgi?place=apiguide
Les exemples sont en Visual Basic, et ils convertissent les appels de dll en fonction, mais il m'a semblé (dites-moi si je me trompe) qu'il suffit de rajouter un dernier paramètre à ceux indiqués et de faire notre "calldll" habituel. Il suffit alors d'interroger le dernier paramètre. A vérifier, mais ça marche ici.

Pour l'exemple ci-dessus, ils donnaient
'Declare Function lOpen Lib "kernel32" Alias "_lopen"_
'(ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
'Private Declare Function lClose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long

Voili voilou. Si ça peut rendre service, tant mieux. Si ça crame votre machine, je décline toute responsabilité :-)))

1180michel

PS : je ne sais pas comment marquer dans le titre que le problème est résolu... Merci aux administrateurs de le faire éventeullement.

   
Le 17/01/2018 à 16h37

Libertynaute Débutant

Groupe: Membre

Inscrit le: 22/09/2015
Messages: 12
Sorry, le lien précédent ne semble pas marcher. Voir celui-ci :

http://allapi.mentalis.org/agnet/apiguide.shtml

:-)

   
Le 17/01/2018 à 18h50

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 1992
Merci pour le retour d'infos; il semble qu'avec run ....exe (prog en C) l'exe soit prioritaire et suspend JB (pour LB je ne sais pas).
Pour tout dire, on ne cultive pas trop les dll dans ce jardin-ci.
____________________
Roro

   
Général » Question sur "Run" Attendre la fin du"Run" avant de continuer...  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie