Partage d'information entre applications ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Partage d'information entre applications ?

Message par Golfy »

Actuellement je partage des données via des fichiers sur le disque dur.
Est-il possible de placer dans une zone mémoire partagé des données ?
Merci.
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Partage d'information entre applications ?

Message par cederavic »

Oui, tu peux partager une zone mémoire entre plusieur process (il me semble que Dobro avait posté la dessus...), ou alors :
Utiliser les entrées / sortie de tes programmes
Utiliser une connexion locale (le mieux je pense)

Le problème des fichiers c'est surtout les accès (si l'un est en train de lire alors que l'autre ecris dedans c'est pas top mais gérable).
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Partage d'information entre applications ?

Message par Cls »

Bonjour,

voici un post qui traite du sujet : http://forums.purebasic.fr/french/viewt ... f=1&t=4834
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Re: Partage d'information entre applications ?

Message par cederavic »

Ah oui c'etait un code de Nico mais c'etait Dobro qui disait que c'etait un code de Nico...
Bouerf j'y etais presque!
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: Partage d'information entre applications ?

Message par Golfy »

Merci pour vos réponses... :)
j'ai peur que le code proposé par Cls ainsi que le code sur le forum anglais ne soient compatibles qu'avec Microsoft Windows :roll:
Je vais voir ce qui est faisable à partir du réseau (UDP ou TCP) : les instructions réseaux de Purebasic fonctionne dans tous les environnements :|
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Re: Partage d'information entre applications ?

Message par Cls »

Ah oui, par contre, c'est du Windows seulement.
Effectivement, tu devrais pouvoir t'en sortir avec le réseau.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Partage d'information entre applications ?

Message par Backup »

bon je sais , c'est seulement pour windows , mais apres avoir testé les mailslots qui sont limité en taille

j'ai trouvé ( je sais plus si j'ai pompé ou pas )
ce code qui offre un véritable Ram disque !!

le format des données qui transite passe par une structure ,, donc permet de faire transiter plusieurs format de donnée en meme temps :D

et quasi autant qu'on veux !!


voici un exemple :

le code qui reçoit :
ici la fenetre est purement décorative, les données reçues etant affiché par Debug !
notez que le code est court, mais j'ai eu la fleme de retirer les Debug (tiré directement de mon EPB )

Code : Tout sélectionner

Enumeration
	#win
EndEnumeration


Structure Partage  ; le Ram Disque , defini la forme des données qui transite , ici un binaire , une valeur , et meme on pourrai ajouter un text de 500 caractere ...
	declencheur.b ; sert dans l'exemple a etre sur qu'on reçois un message
	valeur1.i  ; la valeur qu'on reçoit er qui va determiner les Cases plus bas
	message.S {500}  ; eventuellement on pourrai recevoir un text de 500 caracteres en ajoutant  "text.s=*ram\message.S"  ;)
EndStructure
Global *ram.Partage 
;- memoire partagé
MemoirePartagee=CreateFileMapping_($FFFFFFFF,#Null, #PAGE_READWRITE, 0, SizeOf(Partage),"EPB_RAM") ; le nom doit etre le meme pour l'emmeteur et le recepteur
*ram=MapViewOfFile_(MemoirePartagee, #FILE_MAP_WRITE, 0, 0, 0)

OpenWindow(#win, 10,10,800,600,"reçoit" ,#PB_Window_SystemMenu)


Repeat  ; boucle principale
Event= WaitWindowEvent(2)
;- reception message Ram 

If *ram\declencheur.b=1		
	type=*ram\valeur1
	Select type
		Case 0 ; pose au curseur ..
			Debug "recoit 0"
			Debug "le message est :" +*ram\message.S
		Case 1 ; remplace la ligne
			Debug "recoit 1"
		Case 2 ; insertion de ligne
			Debug "recoit 2"
		Case 3 ; saut de ligne ( positione le curseur en y)
			Debug "recoit 3"
		Case 4 ; positione le curseur en X
		Debug "recoit 4"
		Case 5 ; Selectionne
			Debug "recoit 5"
		Case 6 ; remplace
		Debug "recoit 6"
		Case 7 ; recupe la ligne en cours vers le clipboard
			Debug "recoit 7"
		Case 8 ; creation d'un onglet et chargement d'un code
		Debug "recoit 8"
		Case 9 ; recupe le code complet de l'onglet précisé  et envoie vers le clipboard		
			Debug "recoit 9"
		Case 10 ; active l'onglet .. rien de plus 
		Debug "recoit 10"
			
	EndSelect 
	Buffer.S=""
	Beep_(770,100)
	*ram\declencheur.b=0
EndIf

Until Event = #PB_Event_CloseWindow  

le prg qui envoie a lancer apres le prg ci dessus de preference
je ne trahi pas un secret en précisant que c'est ce que j'utilise pour EPB ;)
cela me permet de commander EPB par un prg utilitaire , par exemple faire afficher le code RGB() a l'emplacement du curseur ... ;)

Code : Tout sélectionner


; ************ OBLIGATOIRE *****************************************
;- structure memoire partagé
Structure Partage
	declencheur.b
    valeur1.i
	message.s {500}
EndStructure
Global *ram.Partage 

MemoirePartagee=CreatefileMapping_($FFFFFFFF,#Null, #PAGE_READWRITE, 0, SizeOf(Partage),"EPB_RAM")
*ram=MapViewOfFile_(MemoirePartagee, #FILE_MAP_WRITE, 0, 0, 0)
Declare envoie_epb(text.s,type)

Procedure envoie_epb(text.s,type) ; ici on envoie nos données
	*ram\declencheur.b=1 ; un binaire qui va servir a declencher la reception dans le recepteur
	*ram\valeur1.i=type ; un numero histoire de
	*ram\message.s=text.s ; un petit message en text
EndProcedure
; *****************************************************************************




; cette procedure vous permettra d'envoyer des commandes au prg de reception
; utile si vous dévellopez un utilitaire, qui aurai besoin de poser un résultat dans EPB
; utilisation : envoie_epb("message",ORDRE) 

; ****************** exemple d'utilisation **************************************
envoie_epb("un Petit Message",0)  ; ORDRE 0,  pose au curseur
; ; *******************************************************************
;envoie_epb("Remplace",1)  ;  ORDRE 1 , Remplace la ligne en cours (par rapport au curseur)
; ; *******************************************************************
;envoie_epb("un Petit Message",2) ; ORDRE 2 ,insert une ligne (par rapport au curseur)
; ; *******************************************************************
;Debug GetCurrentDirectory()
;envoie_epb("20",3) ; ORDRE 3 ,saute a la ligne 20
; ; *******************************************************************
;envoie_epb("10",4) ; ORDRE 4 ,positionne le curseur apres le 10eme caratere
; ; *******************************************************************
;envoie_epb("5,10",5) ; ORDRE 5 ,selectione  apres le 5em caractere sur une longueur de 10 caractere de la ligne en cours
;  *******************************************************************
; exemple de selection et remplacement :
;envoie_epb("5,10",5) ; selectione  apres le 5em caractere sur une longueur de 10 caractere de la ligne en cours

;envoie_epb("message qui remplace",6) ; ORDRE 6  et remplace par le message
; ; *******************************************************************
; exemple de recuperation de la ligne en cours par le clipboard()
 ;envoie_epb("message bidon",7) ; ORDRE 7,  Recupere la ligne en cours, retour par le clipboard

; Delay(200)
 ;Debug GetClipboardText()
; ; *******************************************************************
; exemple de creation d'un onglet et du chargement d'un code dedans :
 ;file$=OpenFileRequester("load pb",Home$,"*.pb",0)
 ;envoie_epb(file$ ,8) ; ORDRE 8, creer un onglet, et charger un fichier *.pb
; ; *******************************************************************
; exemple de recuperation du code complet de l'onglet précisé , dans le clipboard()
 ; envoie_epb("3",9) ; ORDRE 9 , Recupere le code complet de l'onglet précisé (ici l'onglet 3), retour par le clipboard
; *************************************************************************
; exemple d'activation des onglets , rien de plus
; envoie_epb("0",10) ; ORDRE 10 ,Active l'onglet précisé (ici l'onglet 1 ... les onglets commencent a  0), rien de plus...
; Delay(1000)
; envoie_epb("1",10) ; Active l'onglet précisé (ici l'onglet 2 ... les onglets commencent a  0), rien de plus...
; Delay(1000)
; envoie_epb("2",10) ; Active l'onglet précisé (ici l'onglet 3 ... les onglets commencent a  0), rien de plus...
; **************************************************************************

; 
; EPb 

pffff ! mon bon fond, me perdra :roll:
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: Partage d'information entre applications ?

Message par Golfy »

Dobro a écrit : pffff ! mon bon fond, me perdra :roll:
Mort de rire :lol:
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Partage d'information entre applications ?

Message par Backup »

:)
Répondre