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); |