PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Mémoire partagée : callback automatique sur modification
Mémoire partagée : callback automatique sur modification
Iniciado por Yoann, 09,jul. 2019 08:48 - 1 respuesta
Miembro registrado
9 mensajes
Publicado el 09,julio 2019 - 08:48
Bonjour,

Je rencontre une souci lors de l'utilisation des zones de mémoire partagée.
Mon thread principal alloue et ouvre une ou plusieurs zones avec fMemOuvre() :

IF fMemOuvre(sZoneNom,nZoneTaille,partageGlobal,foLectureEcriture,pThreadEvenements) = -1 THEN
//Gestion de l'échec
END


Avec la procédure censée être exécutée sur modification de la zone :

Procedure pThreadEvenements(sNomZoneComplet est une chaîne = "")


Ces allocations fonctionnent, je suis en mesure d'échanger des informations avec les threads secondaires et d'autres applis Windev. En revanche, lorsqu'une zone est modifiée (par un thread secondaire ou même une autre application Windev), la procédure 'pThreadEvenements' n'est pas exécutée.
J'écris dans les zones grâce à une procédure contenant :

nTaille = Taille(sValeur) //Obtention taille des données à écrire
nIdZone = fMemOuvre(sZoneNom,0,partageGlobal,foEcriture) //Ouverture zone en écriture
IF nIdZone = -1 THEN
//Gestion erreur
END

IF nTaille > fTaille(nIdZone) THEN //Contrôle taille à écrire par rapport à taille zone mémoire
//Gestion erreur
END

IF fPositionne(nIdZone,0,fpDébut) = -1 THEN //Position curseur en début de zone
//Gestion erreur
END

IF fEcrit(nIdZone,sValeur,nTaille) = -1 THEN //Ecriture
//Gestion erreur
END


Je pense pourtant que ma procédure callback est de la bonne forme, le type du paramètre n'est pas précisé dans la documentation mais je suppose que c'est une chaine.
L'exemple didactique WD PartageMémoire n'utilise pas de procédure automatique sur modification de zone. J'ai tenté de l'ajouter à l'exemple mais le résultat est le même, rien ne se passe.

Merci pour votre aide :)

Yoann
Miembro registrado
9 mensajes
Publicado el 09,julio 2019 - 15:04
J'ai finalement trouvé deux raisons à ce dysfonctionnement :
-Pour déclencher l’événement il faut bien que la modification de la zone vienne d'une autre APPLICATION en WLangage (et pas d'un thread 2ndaire)
-Contrairement à l'exemple fourni par WD, il ne faut pas faire appel à chaque fois à fMemOuvre(). Un seul appel suffit, on stock ensuite l'id de la zone pour pouvoir le réutiliser ailleurs dans l'application. Des appels supplémentaires à fMemOuvre stoppent apparemment la surveillance de la zone mémoire.