spheris | #1 Posté le 15/11/2016 à 23:38:14 |
---|
![](http://gambaslinux.fr/file/forum/crevette2.png) | Ce sujet a été traité mais une petite différence cependant. 2 logiciels GB3 tournent sur mon PC. Comment le premier nommé A.gambas peut il relancer le second B.gambas à intervalle régulier toutes les 1000secondes par exemple. C'est juste pour essayer. Un timer decompte et quand il passe à 0, je lance la fonction redemarrer. Je n'arrive pas a capturer l'ID de mon programme nommé B.gambas. me renvoi l'ID de mon programme A.gambas Merci pour vos réponses. ;) |
vuott | #2 Posté le 16/11/2016 à 02:32:57 |
---|
Ne cedere ineluctabili possimus![]() | Si tu lances le programme b.gambas avec "Shell", tu dois utiliser la Classe Process.
Exemplum simplex:
Code programme "a.gambas"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| PRIVATE tempus AS Timer
PUBLIC SUB Main()
WITH tempus = NEW Timer AS "Tempus" .Delay = 2000 ' Le timer on active chaques 2 secondes. .Start END WITH END
PUBLIC SUB Tempus_Timer()
DIM pr AS Process pr = SHELL "/emplacement/du/programme/b.gambas" ' Lance un nouveau programme "b.gambas" PRINT "Num. Process: "; pr.Id ' Nous voyons le numéro du procès du programme "b.gambas" pr.Kill ' Il tue le procès du programme "b.gambas" END
|
Code programme "b.gambas"
1
2
3
4
5
| PUBLIC SUB Main()
PRINT "Tempus regit actum !"
END
|
« Vita non suavis esse potest, nec Mors amara. » |
spheris | #3 Posté le 16/11/2016 à 07:54:41 |
---|
![](http://gambaslinux.fr/file/forum/crevette2.png) | Merci vuot, mais cela ne fonctionne pas. En effet, si je fais un "top" dans le terminal, je ne vois pas mon appli gambas mais 2 "gbr3" lancé. cela tue un process et en relance un mais je ne vois pas mon logiciel s'éteindre et se redémarrer. ![;)](images/smileys/icon_wink.png) |
vuott | #4 Posté le 16/11/2016 à 16:51:47 |
---|
Ne cedere ineluctabili possimus![]() | Je croyais avoir compris que le programme de Gambas A ne doit pas être fermé. « Vita non suavis esse potest, nec Mors amara. » |
didier18 | #5 Posté le 16/11/2016 à 18:08:49 |
---|
![]() | Bonjour spheris
En fait tu veux un programme type 'rebond' ? Voici quelques sources qui semblent correspondre à ce que tu veux (bon ok, faudra que tu fasses quelques adaptations pour ton besoin perso)... Pour les variables j'ai fait:
1
2
3
4
| ' Gambas class file PUBLIC $sNumPID2 AS STRING 'est le numéro du pid PUBLIC $NomApp AS STRING = Application.Title 'le nom de l'application (par exemple ton projet s'appel rebond) PUBLIC FichIni AS File 'fichier d'initialisation
|
Ensuite à l'ouverture du Form...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| PUBLIC SUB Form_Open() 'on créé le fichier rebond.pid (il vaut mieux le mettre dans le user.home (droit d'accès par rapport aux autres distros.)) FichIni = OPEN User.Home &/ $NomApp & ".pid" FOR CREATE 'ouvre un nouveau fichier" PRINT #FichIni, "[Pid actuel]" 'écrit l'étiquette SHELL "pidof -s gbr3 /usr/bin/" & $NomApp & ".gambas" TO $sNumPID2 'renvoie le pid actuellement utilisé" PRINT #FichIni, "gbr3 /usr/bin/" & $NomApp & ".gambas = " & $sNumPID2 'écrit la valeur du pid dans le fichier User.Home &/ $NomApp & ".pid" (rebond.pid) CLOSE #FichIni 'on ferme le fichier ME.Refresh 'on vérifie si le programme appelant a été fermé.il vaut mieux le mettre dans le user.home (droit d'accès par rapport aux autres distros. 'normalement le fichier contenant le pid ne DOIT PAS exister... 'sinon le programme n'est pas fermé ou il n'a pas été fermé correctement (arrêt intempestif) IF NOT Exist(User.Home & "/Monprogramme.pid") THEN 'si Monprogramme.pid n'existe pas c'est que Monprogramme est fermé... SHELL "/usr/bin/Monprogramme.gambas" 'donc on relance l'exécutable Monprogramme.gambas ME.Close 'puis on quitte ENDIF END
|
Et quand le Form se ferme...
1
2
3
| PUBLIC SUB Form_Close() 'quand le formulaire est en cours de fermeture TRY KILL User.Home &/ $NomApp & ".pid" 'on supprime le fichier User.Home &/ $NomApp & ".pid" (rebond.pid) END
|
En pas à pas tu verras 2 fichiers (rebond.pid et Monprogramme.pid) avec leur n° pid. Bien sur à la fermeture de Monprogramme, il faudra détruire Monprogramme.pid qui aura été créé dans le user.home... J'espère que ça t'aidera...
Bonne journée.
|