Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
prog:lazarus:cas:processus:shared_memory [12/03/2023 16:45] thierry [Mémoire partagée] |
prog:lazarus:cas:processus:shared_memory [12/03/2023 17:21] (Version actuelle) thierry [Mémoire partagée] |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| ====== Mémoire partagée ====== | ====== Mémoire partagée ====== | ||
| + | Ma problématique est de faire communiquer deux applications différentes (sur le même PC) entre elles... | ||
| + | |||
| + | Voici quelques pistes : | ||
| ===== Utilisation d'une classe TTICSharedMemory ===== | ===== Utilisation d'une classe TTICSharedMemory ===== | ||
| + | Ci dessous un exemple de données partagées entre deux applications Windows.\\ | ||
| + | Un serveur avec un ''TEdit'', qui modifie la mémoire partagé dés qu'on modifie la valeur du ''TEdit''.\\ | ||
| + | Un Client, qui affiche toutes les secondes la valeur de la donnée partagée. | ||
| ==== uTICSharedMemory ==== | ==== uTICSharedMemory ==== | ||
| Cette unité contient le code de l'object TTICSharedMemory | Cette unité contient le code de l'object TTICSharedMemory | ||
| Ligne 26: | Ligne 32: | ||
| procedure FreeHandle; | procedure FreeHandle; | ||
| public | public | ||
| + | // AName = l'identifiant du fichier partagé en mémoire | ||
| + | // ASize = la taille totale des données partagées | ||
| constructor Create(AName: PChar; ASize: integer); | constructor Create(AName: PChar; ASize: integer); | ||
| + | | ||
| destructor Destroy; override; | destructor Destroy; override; | ||
| property LastError: DWord read FLastError; | property LastError: DWord read FLastError; | ||
| + | |||
| + | // Pointer = l'adresse de la donnée partagée | ||
| property Pointer: pointer read FPointer; | property Pointer: pointer read FPointer; | ||
| end; | end; | ||
| Ligne 71: | Ligne 82: | ||
| end. | end. | ||
| </code> | </code> | ||
| - | ==== Titre ==== | + | ==== Le Client ==== |
| + | Cette unité contient le code du client.\\ | ||
| + | C'est un ''TForm'' avec un ''TMemo'' et un ''TTimer''.\\ | ||
| + | Toutes les secondes il accéde a la mémoire partagé et affiche son contenu dans le ''TMemo'' | ||
| <code delphi uFormClient.pas> | <code delphi uFormClient.pas> | ||
| Ligne 92: | Ligne 106: | ||
| type | type | ||
| + | // La structure qui sera échangée entre les deux applications | ||
| TDatas = packed record | TDatas = packed record | ||
| Text: shortstring; | Text: shortstring; | ||
| Ligne 138: | Ligne 153: | ||
| end. | end. | ||
| </code> | </code> | ||
| - | ==== Titre ==== | + | ==== Le Serveur ==== |
| + | Un ''TForm'' contenant un ''TEdit''.\\ | ||
| + | Dés que l'on modifie le ''TEdit'' il met a jour la mémoire partagée. | ||
| <code delphi uFormServer.pas> | <code delphi uFormServer.pas> | ||
| Ligne 153: | Ligne 170: | ||
| type | type | ||
| + | // Structure de données partagée | ||
| TDatas = packed record | TDatas = packed record | ||
| Text: shortstring; | Text: shortstring; | ||
| Ligne 197: | Ligne 215: | ||
| procedure TFormServer.Edit1Change(Sender: TObject); | procedure TFormServer.Edit1Change(Sender: TObject); | ||
| begin | begin | ||
| + | // Modification de la mémoire partagée | ||
| FPDatas^.Text:=Edit1.Text+#0; | FPDatas^.Text:=Edit1.Text+#0; | ||
| FPDatas^.Size:=length(Edit1.Text); | FPDatas^.Size:=length(Edit1.Text); | ||