Les fichiers sources sont dans le répertoire ${UPS_HOME}/upssdk/demo/${UPS_LANGUAGE}/mempar/.
Le noyau d'exécution doit être multi-processus via le partage de l'entrepôt Systeme qui doit être desservi par le programme serveur.
Cela se déclare dans le fichier ${UPS_HOME}/ini/${UPS_USER}/upsoms.ini comme suit :
Serveur=serveur
upscmp Source=demande
upscmp Source=serveur
upscmp Source=client
upsorb PortUpsOrb=1632
serveur PortUpsOrb=1632 PortServeur=1640 NbServeurs=1 PasDOrb=Non
client PortUpsOrb=1632 PortServeur=1650 NbServeurs=1 PasDOrb=Non
upsorb PortUpsOrb=1632
upssng Source=serveur.upl PortUpsOrb=1632 PortServeur=1640 NbServeurs=1 PasDOrb=Non
upssng Source=client.upl PortUpsOrb=1632 PortServeur=1650 NbServeurs=1 PasDOrb=Non
Source Module "Exemple d'emploi de la mémoire partagée" Version 4.0.0 ModuleDynamique;
Composant Dans "c:/up/exemples/libd1.upl";
Source Composant "Exemple d'emploi de la memoire protegee" Version 4.0.0 RattacherA "c:/up/exemples/demande.upl";
SegmentPublic MemoirePublique;
Public :
/******/
Type DemandeClient Defaut
/***********************/
Constructeur();
TacheClient : Nul Ou Tache;
Libelle : Nul Ou Caractere;
Fin Type
Variable
/******/
Public :
/******/
ListeDeDemandes : Nul Ou ListeDe DemandeClient;
SD : Nul Ou Synchronisation;
DebuterComposant
/**************/
Debut
Si SegmentPublic.NbUtilisations()==1 Alors
SD=Synchronisation(DemandeClient"<.I>, SynchronisationProtegee);
Fin Si
Fin DebuterComposant
Source Composant "Exemple d'emploi de la memoire protegee" Version 4.0.0;
SegmentPublic MemoireProtegee;
ImporterModule
/************/
LibD(<libd.upi>, ImporterDefinitions);
Principal
/*******/
Variable
/******/
D : Nul Ou DemandeClient;
Debut
TantQue Vrai Faire
SD.Prendre(SynchronisationEcritureExclusive);
Si ListeDeDemandes!=Nul Alors
Pour D=ListeDeDemandes.ParcoursAuDebut() JusquA ListeDeDemandes.DernierElement()
Faire
D.Libelle=D.Libelle.Majuscule();
D.TacheClient.ReprendreTache();
Fin Pour
ListeDeDemandes=Nul;
Fin Si
SD.Lacher();
Attendre(1.0);
Fin TantQue
Fin Principal
Source Composant "Exemple d'emploi de la mémoire partagée" Version 4.0.0;
SegmentPublic MemoireProtegee;
ImporterModule
/************/
LibD(<libd.upi>, ImporterDefinitions);
Procedure Dialoguer(Libelle : Caractere)
/************************************/
Variable
/******/
D : Nul Ou DemandeClient;
Debut
SD.Prendre(SynchronisationEcritureExclusive);
D=DemandeClient();
D.TacheClient=TachePrincipale;
D.Libelle=Libelle;
ListeDeDemandes=ListeDeDemandes+D;
SD.Lacher();
TachePrincipale.SuspendreTache();
Ecran.Ecrire(D.Libelle);
Fin Procedure
Principal
/*******/
Debut
Dialoguer("Bonjour le monde");
Attendre(1.0);
Dialoguer("Hello the world");
Attendre(1.0);
Dialoguer("Guten tag die welt");
Fin Principal