AYUDA EN LÍNEA
 WINDEVWEBDEV Y WINDEV MOBILE

Este contenido se ha traducido automáticamente.  Haga clic aquí  para ver la versión en inglés.
Ayuda / WLanguage / Funciones WLanguage / Funciones estándar / Funciones de gestión de procesos / Funciones de área de memoria compartida
  • Gestión del modo compartido
  • Correspondencia entre el nombre proporcionado a fMemOpen y la apertura en C
  • Gestión de las zonas de memoria en formato UNICODE
  • Posicionamiento en la zona de memoria compartida
  • Cierre de la zona de memoria compartida
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaReportes y ConsultasCódigo de Usuario (UMC)
WEBDEV
WindowsLinuxPHPWEBDEV - Código Navegador
WINDEV Mobile
AndroidWidget Android iPhone/iPadIOS WidgetApple WatchMac CatalystUniversal Windows 10 App
Otros
Procedimientos almacenados
Abre una zona de memoria compartida entre varias aplicaciones.
A continuación, el contenido de la zona de memoria puede ser manejado por fSeek, fRead y fWrite.
Ejemplo
// Create/Open a memory area shared between applications (1st application)
arrZoneID is associative array of int
Zone1ID is int
Zone1ID = fMemOpen("MySharedZone", 1024, shareGlobal, ...
foReadWrite, ModificationProcedure)
arrZoneID["MySharedZone"] = Zone1ID
...
// Create/Open a memory area shared
// between applications (2nd application) -
// no callback
Zone2ID is int
Zone2ID = fMemOpen("MySharedZone", 1024, shareGlobal)
// Write into the shared memory area
fWrite(Zone2ID, "Hello, I am a WINDEV application!")
...
// The writing performed by the 2nd application triggers
// the call to the procedure in the 1st application
// -------------------------
// Procedure called whenever the shared memory area is modified
PROCEDURE ModificationProcedure(NameNotifZone is string)
ModifiedString is string
ModifiedString = fRead(arrZoneID[NameNotifZone], 1024)
Trace(StringBuild("The %1 string was written into the %2 zone", ModifiedString, NameNotifZone))
WINDEVWEBDEV - Código ServidorLinux
llMemHdl is int
sFileName is string = fTempPath() + ["/"] + "ipc0"
fSaveText(sFileName, "")
sNameMemZone is string = Charact(3) + sFileName
llMemHdl = fMemOpen(sNameMemZone, 1024, shareGlobal)

// Equivalent code in C
// char * szZoneName = "/tmp/ipc0"
// int nSize;
// int nMem;
// key_t nKey;
// int nAccess = 0666;
// Opening in read/write

// nSize = 1024;
// nKey = ftok(szZoneName, 3);
// nMem = shmget(nKey, nSize, nAccess);
Sintaxis
<Result> = fMemOpen(<Memory area> , <Size> [, <Share> [, <Opening mode> [, <WLanguage procedure>]]])
<Result>: Integro
  • Identificador de la zona de memoria.
    Este identificador puede ser manejado por las funciones fxxx como un identificador de archivo externo devuelto por fOpen.
  • -1 si se produce un error.
<Memory area>: Cadena de caracteres
Nombre de la zona de memoria compartida que debe crearse o abrirse. Este nombre debe ser el mismo en las diferentes aplicaciones que accedan a la zona.
La zona se crea automáticamente si no existe.
Linux El nombre de la zona de memoria debe tener el siguiente formato:
Charact(<Val>) + <Existing Unix file name>

donde <Val> es un número entero de 1 a 127 que corresponde al segundo parámetro de la "C" ftok() API( si el intercambio debe realizarse con una Process escrita en C).
<Size>: Integro
Tamaño mínimo de la zona de memoria compartida en bytes.
  • Si la zona ya existe:
    • si <Size> es igual a 0: este parámetro se ignora y el tamaño de la zona es devuelto por fSize.
    • si <Size> es diferente de 0:
      • si <Size> es demasiado grande, fMemOpen devuelve -1.
      • la zona de memoria existente se abre con un tamaño al menos igual al parámetro (el tamaño real lo define el sistema operativo y lo devuelve fSize).
  • Si la zona no existe, se crea con un tamaño al menos igual al parámetro (el tamaño real lo define el sistema operativo y lo devuelve fSize).
<Share>: Constante opcional de tipo Integer
Modo para compartir la zona de memoria entre las sesiones de usuario:
shareGlobalLa zona se comparte entre todas las aplicaciones de todas las sesiones de la el equipo.
shareUser
(Valor predeterminado)
La zona se comparte entre todas las aplicaciones de la sesión de usuario.
<Opening mode>: Constante opcional de tipo Integer
Constantes utilizadas para definir el modo de acceso a la zona de memoria compartida.
foReadLa zona se abre en "sólo lectura".. Sólo tendrá la capacidad de leer esta zona.
Si se utiliza esta constante, para cambiar el modo de apertura de la zona de memoria, hay que cerrar la zona de memoria (fClose) y volver a abrirla con un modo de apertura diferente.
foReadWrite
(Valor predeterminado)
La zona se abre en "lectura/escritura".. Podrá leer y modificar esta zona.
foUnicodeAbrir un archivo en formato UNICODE. (Para más detalles, consulte las Notas)
foWriteLa zona se abre en "sólo escritura".. Sólo tendrá la posibilidad de escribir en esta zona.
<WLanguage procedure>: Nombre de Procedure
Nombre de la WLanguage Procedure ("callback" Procedure) que será llamada automáticamente si la zona de memoria es modificada por otra aplicación WLanguage.
Este procedimiento tiene el siguiente formato:
PROCEDURE <Procedure name>(<Zone name>)

El parámetro de esta Procedure es opcional. Debe utilizarse cuando se utiliza una única llamada de retorno para recibir las notificaciones de varias zonas de memoria compartida.
El parámetro <Nombre de la zona> tendrá como prefijo la cadena "Global\" si la zona se creó con la constante shareGlobal y la cadena "Local\" si la zona se creó con la constante shareUser.
Observaciones

Gestión del modo compartido

El modo compartido difiere según las versiones de los sistemas operativos:
  • Windows Vista y posterior: el parámetro <Share> de fMemOpen es compatible. Los servicios y los usuarios están ubicados en un espacio diferente. Para compartir un área de memoria entre un servicio y una aplicación en la sesión de un usuario, debe utilizarse la constante shareGlobal.
  • En Terminal Server: el parámetro <Share> de fMemOpen es compatible. Cada sesión abierta en el Terminal Server tiene un espacio de memoria diferente. Las aplicaciones iniciadas en la misma sesión TSE pueden compartir un área de memoria creada con la constante shareUser. Las aplicaciones ubicadas en diferentes sesiones pueden compartir una zona de memoria creada con la constante shareGlobal.
  • Ventanas: Los derechos de administrador son necesarios para acceder a un archivo Global zona de memoria en modo escritura o en modo lectura.
Linux

Correspondencia entre el nombre proporcionado a fMemOpen y la apertura en C

Los dos ejemplos de código siguientes presentan la apertura de una zona de memoria (llamada "myzone") en WLanguage e inC.
// Code in WLanguage
ZoneID is int
ZoneID = fMemOpen("myzone", 1024, shareGlobal)
// Equivalent code in C
char * szZoneName = "myzone";
int nSize;
int nMem;
key_t nKey;
int nAccess = 0666; // Open in read/write

nSize = 1024;
nKey = ftok(szZoneName+sizeof(char),(int) szZoneName[0]);
nMem = shmget(nKey, nSize , nAccess);

Gestión de las zonas de memoria en formato UNICODE

fMemOpen se utiliza para leer y escribir áreas de memoria utilizando UTF-16 o Little Endian Unicode. En apertura, la marca "Unicode actual" (FFFE) se lee automáticamente. En el momento de la creación, se añade automáticamente.
Observación: El mecanismo de devolución de llamada de automatic de un WLanguage Procedure siempre que la zona de memoria es modificada por otra aplicación opera entre aplicaciones WLanguage solamente.

Posicionamiento en la zona de memoria compartida

Al abrir una zona de memoria compartida, la posición actual corresponde al primer byte de la zona.
Esta posición puede ser modificada por fSeek.

Cierre de la zona de memoria compartida

Cuando la aplicación ya no necesita acceder a la zona de memoria compartida, el acceso puede ser cerrado por fClose. La zona es efectivamente destruida una vez que la última aplicación que accede a ella ha cerrado la zona.. Si no se encuentra ninguna llamada explícita a fClose en el código de la aplicación, el cierre se realizará automáticamente al finalizar la aplicación.
Componente: wd290std.dll
Versión mínima requerida
  • Versión 15
Esta página también está disponible para…
Comentarios
Haga clic en [Agregar] para publicar un comentario

Última modificación: 19/01/2023

Señalar un error o enviar una sugerencia | Ayuda local