|
| 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 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) nIdZone = fMemOuvre(sZoneNom,0,partageGlobal,foEcriture) IF nIdZone = -1 THEN END
IF nTaille > fTaille(nIdZone) THEN END
IF fPositionne(nIdZone,0,fpDébut) = -1 THEN END
IF fEcrit(nIdZone,sValeur,nTaille) = -1 THEN 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. |
| |
| |
| | | |
|
| | | | |
| | |
|