multi thread et pointeurs

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
fra
Messages : 3
Inscription : ven. 11/nov./2005 15:22

multi thread et pointeurs

Message par fra »

salut
j'ai créé deux aplis sensées tourner en parrallèle (multi thread) de sorte a pouvoir effectuer certaines longues taches ou répétitives cependant je n'arrive pas a modifier les variable entre deux programmes sans que l' on m'informe d'une violation d' accès mémoire
en clair : le prog A ne peut pas modifier les variables du prog B
est ce que vous savez comment je pourrais faire
merci
FRA
projet carnot en force !!
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

c'est normal, pour accéder a la mémoire d'un autre processus il faut passer par l'api... Regarde du côté de PBOSL

Dri
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Deux applis :
Tu parle de deux Threads ou deux EXE ???

Si c'est deux theads, faut que ets variables soient globales ... :wink:
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
fra
Messages : 3
Inscription : ven. 11/nov./2005 15:22

Message par fra »

je parle bel et bien de deux applis
mais je ne trouve pas d' info sur pbosl
est ce que vous pourriez m'aider un tout petit peu plus ;) ?
FRA
projet carnot en force !!
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Un SendMessage avec WM_COPYDATA suffira pour ce que tu demandes, selon le message que l'une de tes deux applis interceptera, elle initialisera telle ou telle variable.
Exemple :

A envoye WM_RESET_INIFFILE à B, B reset donc le fichier init et les variables correspondantes et vice versa.
Plus d'informations ici.
Tu pourras même envoyer des données (pointeur sur structure) si tu le souhaites.
"Qui baise trop bouffe un poil." P. Desproges
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

tient je connais pas le message copydata ^^
Je vais regarder ca de plus près :D

[edit]
je viens de tilter, ca ne fonctionne que pour les programmes fenêtrés
sinon c'est toujours bon à savoir ^^

Dri
fra
Messages : 3
Inscription : ven. 11/nov./2005 15:22

Message par fra »

merci pour toutes vos idées
j' ai cependant persévéré dans la proposition du début ( pbosl ) et cela a porté ses fruits
PBOSL_AllocateMemoryGlobal
cette fonction permet en effet de gerer un même espace mémoire avec plusieurs applications :)
je pense donc que je ferais comme sa.
cependant, toutes vos remarque/suggesions sont les bienvenues
encore une fois merci et a trés bientot
FRA
projet carnot en force !!
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Dr. Dri>tu n'est pas obligé de créér une fenêtre visible (cf les wrappers winamp par exemple)

fra>tu as la possibilité de créer un espace de mémoire partagé via CreateFileMapping.
"Qui baise trop bouffe un poil." P. Desproges
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Dr. Dri a écrit :tient je connais pas le message copydata ^^
Je vais regarder ca de plus près :D

[edit]
je viens de tilter, ca ne fonctionne que pour les programmes fenêtrés
sinon c'est toujours bon à savoir ^^

Dri
C'est ce qui est utilisé dans jaPBe pour coller des données dans l'éditeur.

Code : Tout sélectionner

;/Constantes Window
Enumeration
  #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
  #Edit
  #Bouton
  #Btn_Quit
EndEnumeration

;/ Constantes diverses
Enumeration 1
  #WMCD_OpenFile              ; Ouvre un fichier dans une nouvelle page
  #WMCD_InsertText            ; Insère le texte à la position du curseur.
  #WMCD_ReplaceCompleteText   ; Remplace la totalité du texte
  #WMCD_ReplaceCurrentLine    ; Remplace la ligne ou se trouve le curseur
  #WMCD_NewText               ; Ouvre un nouvel onglet, et lui passe le texte
EndEnumeration

; MainWin : Handle de la fenêtre qui envoie les données
; Data$   : Données
; Mode    : Type d'envoi, défini par les constantes ci-dessus
;
Procedure SendDatasToEditor(MainWin, Datas$, Mode.l)
  RunOneWin = FindWindow_(@"WindowClass_0",@"jaPBe-RunOneWindow")
  If RunOneWin
    If Datas$
      cd.COPYDATASTRUCT
      cd\dwData = Mode
      cd\cbData = Len(Datas$)+1
      cd\lpData = @Datas$
      SendMessage_(RunOneWin, #WM_COPYDATA, MainWin, cd)  
    EndIf
  EndIf
EndProcedure


If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
  If CreateGadgetList(WindowID(#Window_0))
    StringGadget(#Edit, 10, 10, 280, 20, "Un petit texte de démonstration.")
    ButtonGadget(#Bouton, 10, 40, 280, 20, "Envoyer")
    ButtonGadget(#Btn_Quit, 100, 170, 100, 25, "Quitter")
  EndIf
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_EventGadget
        Select EventGadgetID()
          Case #Bouton
            Texte.s = GetGadgetText(#Edit)
            If Texte <> ""
              SendDatasToEditor(WindowID(#Window_0), "Chaine.s = " + Chr(34)+Texte+Chr(34), #WMCD_NewText)
            EndIf
            
          Case #Btn_Quit
            quit = 1
        EndSelect
        
      Case #PB_EventCloseWindow : quit = 1
    EndSelect
  Until quit = 1
  End
EndIf
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Faut chercher un peu , j'ai posté plusieurs exemples sur l'échange de données entre process, WM_COPYDATA, fichiers mappés et pipes nommés.

:)
Répondre