QSharedMemory Class
La clase QSharedMemory proporciona acceso a un segmento de memoria compartida. Más...
| Cabecera: | #include <QSharedMemory> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Hereda: | QObject |
Tipos Públicos
| enum | AccessMode { ReadOnly, ReadWrite } |
| enum | SharedMemoryError { NoError, PermissionDenied, InvalidSize, KeyError, AlreadyExists, …, UnknownError } |
Funciones Públicas
| QSharedMemory(const QString &key, QObject *parent = nullptr) | |
| QSharedMemory(QObject *parent = nullptr) | |
| QSharedMemory(const QNativeIpcKey &key, QObject *parent = nullptr) | |
| virtual | ~QSharedMemory() |
| bool | attach(QSharedMemory::AccessMode mode = ReadWrite) |
| const void * | constData() const |
| bool | create(qsizetype size, QSharedMemory::AccessMode mode = ReadWrite) |
| void * | data() |
| const void * | data() const |
| bool | detach() |
| QSharedMemory::SharedMemoryError | error() const |
| QString | errorString() const |
| bool | isAttached() const |
| QString | key() const |
| bool | lock() |
(since 6.6) QNativeIpcKey | nativeIpcKey() const |
| QString | nativeKey() const |
| void | setKey(const QString &key) |
(since 6.6) void | setNativeKey(const QNativeIpcKey &key) |
| void | setNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs()) |
| qsizetype | size() const |
| bool | unlock() |
Descripción Detallada
QSharedMemory proporciona acceso a un segmento de memoria compartida por múltiples hilos y procesos. Los segmentos de memoria compartida son identificados por una clave, representada por QNativeIpcKey. Una clave puede crearse de forma multiplataforma utilizando platformSafeKey().
Un objeto QSharedMemory debe create() el segmento y esta llamada especifica el tamaño del segmento. Todos los demás procesos simplemente attach() al segmento que ya debe existir. Después de que cualquiera de las dos operaciones tenga éxito, la aplicación puede llamar a data() para obtener un puntero a los datos.
Para soportar operaciones no atómicas, QSharedMemory proporciona una API para obtener acceso exclusivo: puedes bloquear la memoria compartida con lock() antes de leer o escribir en la memoria compartida, pero recuerda liberar el bloqueo con unlock() cuando hayas terminado.
Por defecto, QSharedMemory destruye automáticamente el segmento de memoria compartida cuando la última instancia de QSharedMemory es detached del segmento, y no quedan referencias al segmento.
Para más detalles sobre los tipos de claves, las limitaciones específicas de la plataforma y la interoperabilidad con aplicaciones antiguas o que no sean Qt, consulte la documentación Claves IPC nativas. Eso incluye información importante para aplicaciones en sandbox en plataformas Apple, incluyendo todas las aplicaciones obtenidas a través de la Apple App Store.
Véase también Comunicación entre procesos y QSystemSemaphore.
Documentación de tipos de miembros
enum QSharedMemory::AccessMode
| Constante | Valor | Descripción |
|---|---|---|
QSharedMemory::ReadOnly | 0 | El segmento de memoria compartida es de sólo lectura. No se permite escribir en el segmento de memoria compartida. Un intento de escribir en un segmento de memoria compartida creado con ReadOnly hace que el programa aborte. |
QSharedMemory::ReadWrite | 1 | Tanto la lectura como la escritura en el segmento de memoria compartida están permitidas. |
enum QSharedMemory::SharedMemoryError
| Constante | Valor | Descripción |
|---|---|---|
QSharedMemory::NoError | 0 | No se ha producido ningún error. |
QSharedMemory::PermissionDenied | 1 | La operación falló porque la persona que llamó no tenía los permisos requeridos. |
QSharedMemory::InvalidSize | 2 | La operación de creación falló porque el tamaño solicitado no era válido. |
QSharedMemory::KeyError | 3 | La operación falló porque la clave no era válida. |
QSharedMemory::AlreadyExists | 4 | La operación create() falló porque ya existía un segmento de memoria compartida con la clave especificada. |
QSharedMemory::NotFound | 5 | Una operación attach() falló porque no se pudo encontrar un segmento de memoria compartida con la clave especificada. |
QSharedMemory::LockError | 6 | El intento de lock() el segmento de memoria compartida falló porque create() o attach() fallaron y devolvieron false, o porque se produjo un error del sistema en QSystemSemaphore::acquire(). |
QSharedMemory::OutOfResources | 7 | Una operación de create() falló porque no había suficiente memoria disponible para llenar la solicitud. |
QSharedMemory::UnknownError | 8 | Algo más ocurrió y fue malo. |
Documentación de las funciones miembro
QSharedMemory::QSharedMemory(const QString &key, QObject *parent = nullptr)
Construye un objeto de memoria compartida con la dirección parent dada y con la clave de legado establecida en key. Dado que su clave está establecida, sus funciones create() y attach() pueden ser llamadas.
Véase también setKey(), create() y attach().
QSharedMemory::QSharedMemory(QObject *parent = nullptr)
Construye un objeto de memoria compartida con la dirección parent. La clave del objeto de memoria compartida no es establecida por el constructor, por lo que el objeto de memoria compartida no tiene un segmento de memoria compartida subyacente adjunto. La clave debe establecerse con setNativeKey() antes de poder utilizar create() o attach().
Esta función sobrecarga QSharedMemory::QSharedMemory().
Véase también setNativeKey().
QSharedMemory::QSharedMemory(const QNativeIpcKey &key, QObject *parent = nullptr)
Construye un objeto de memoria compartida con la dirección parent y con su clave establecida en key. Dado que su clave está establecida, sus funciones create() y attach() pueden ser invocadas.
Se trata de una función sobrecargada.
Véase también setNativeKey(), create() y attach().
[virtual noexcept] QSharedMemory::~QSharedMemory()
El destructor borra la clave, lo que fuerza al objeto de memoria compartida a detach de su segmento de memoria compartida subyacente. Si este objeto de memoria compartida es el último conectado al segmento de memoria compartida, la operación detach() destruye el segmento de memoria compartida.
Véase también detach() y isAttached().
bool QSharedMemory::attach(QSharedMemory::AccessMode mode = ReadWrite)
Intenta adjuntar el proceso al segmento de memoria compartida identificado por la clave que se pasó al constructor o a una llamada a setNativeKey(). El acceso mode es ReadWrite por defecto. También puede ser ReadOnly. Devuelve true si la operación attach se realiza correctamente. Si devuelve false, llama a error() para determinar qué error se ha producido. Después de adjuntar el segmento de memoria compartida, se puede obtener un puntero a la memoria compartida llamando a data().
Véase también isAttached(), detach(), y create().
const void *QSharedMemory::constData() const
Devuelve un puntero constante al contenido del segmento de memoria compartida, si hay uno adjunto. En caso contrario devuelve null. El valor devuelto por esta función no cambiará hasta que se produzca un detach, por lo que es seguro almacenar este puntero.
Si las operaciones de memoria no son atómicas, puede bloquear la memoria compartida con lock() antes de leer o escribir, pero recuerde liberar el bloqueo con unlock() cuando haya terminado.
Véase también attach() y create().
bool QSharedMemory::create(qsizetype size, QSharedMemory::AccessMode mode = ReadWrite)
Crea un segmento de memoria compartida de size bytes con la clave pasada al constructor o establecida con setNativeKey(), luego se adjunta al nuevo segmento de memoria compartida con el acceso dado mode y devuelve true. Si ya existe un segmento de memoria compartida identificado por la clave, no se realiza la operación de adjuntar y se devuelve false. Cuando el valor de retorno es false, llame a error() para determinar qué error se ha producido.
Véase también error().
void *QSharedMemory::data()
Devuelve un puntero al contenido del segmento de memoria compartida, si hay uno adjunto. En caso contrario devuelve null. El valor devuelto por esta función no cambiará hasta que se produzca un detach, por lo que es seguro almacenar este puntero.
Si las operaciones de memoria no son atómicas, puede bloquear la memoria compartida con lock() antes de leer o escribir, pero recuerde liberar el bloqueo con unlock() cuando haya terminado.
Véase también attach().
const void *QSharedMemory::data() const
Esta función sobrecarga QSharedMemory::data().
bool QSharedMemory::detach()
Elimina el proceso del segmento de memoria compartida. Si este fue el último proceso conectado al segmento de memoria compartida, entonces el segmento de memoria compartida es liberado por el sistema, es decir, los contenidos son destruidos. La función devuelve true si libera el segmento de memoria compartida. Si devuelve false, normalmente significa que el segmento o bien no está unido, o bien está bloqueado por otro proceso.
Véase también attach() y isAttached().
QSharedMemory::SharedMemoryError QSharedMemory::error() const
Devuelve un valor que indica si se ha producido un error y, en caso afirmativo, de qué error se trata.
Véase también errorString().
QString QSharedMemory::errorString() const
Devuelve una descripción de texto del último error que se ha producido. Si error() devuelve un error value, llame a esta función para obtener una cadena de texto que describa el error.
Véase también error().
bool QSharedMemory::isAttached() const
Devuelve true si este proceso está unido al segmento de memoria compartida.
Véase también attach() y detach().
QString QSharedMemory::key() const
Devuelve la clave heredada asignada con setKey() a esta memoria compartida, o una clave nula si no se ha asignado ninguna clave, o si el segmento está utilizando un nativeKey(). La clave es el identificador utilizado por las aplicaciones Qt para identificar el segmento de memoria compartida.
Puede encontrar la clave nativa, específica de la plataforma, utilizada por el sistema operativo llamando a nativeKey().
Véase también setKey() y setNativeKey().
bool QSharedMemory::lock()
Se trata de un semáforo que bloquea el segmento de memoria compartida para el acceso de este proceso y devuelve true. Si otro proceso ha bloqueado el segmento, esta función se bloquea hasta que se libera el bloqueo. Entonces adquiere el bloqueo y devuelve true. Si esta función devuelve false, significa que ha ignorado un falso retorno de create() o attach(), que ha establecido la clave con setNativeKey() o que QSystemSemaphore::acquire() falló debido a un error desconocido del sistema.
Véase también unlock(), data() y QSystemSemaphore::acquire().
[since 6.6] QNativeIpcKey QSharedMemory::nativeIpcKey() const
Devuelve el tipo de clave para este objeto de memoria compartida. El tipo de clave complementa a nativeKey() como identificador utilizado por el sistema operativo para identificar el segmento de memoria compartida.
Puede utilizar la clave nativa para acceder a segmentos de memoria compartida que no hayan sido creados por Qt, o para conceder acceso a memoria compartida a aplicaciones que no sean Qt. Ver Claves IPC nativas para más información.
Esta función se introdujo en Qt 6.6.
Véase también nativeKey() y setNativeKey().
QString QSharedMemory::nativeKey() const
Devuelve la clave nativa, específica de la plataforma, para este objeto de memoria compartida. La clave nativa es el identificador utilizado por el sistema operativo para identificar el segmento de memoria compartida.
Puede utilizar la clave nativa para acceder a segmentos de memoria compartida que no hayan sido creados por Qt, o para conceder acceso a memoria compartida a aplicaciones que no sean Qt. Ver Claves IPC nativas para más información.
Véase también setNativeKey() y nativeIpcKey().
void QSharedMemory::setKey(const QString &key)
Establece el legado key para este objeto de memoria compartida. Si key es la misma que la clave actual, la función regresa sin hacer nada. En caso contrario, si el objeto de memoria compartida está unido a un segmento de memoria compartida subyacente, se detach de él antes de establecer la nueva clave. Esta función no hace un attach().
Puede llamar a key() para recuperar la clave heredada. Esta función es prácticamente igual que :
shm.setNativeKey(QSharedMemory::legacyNativeKey(key));
salvo que permite obtener la clave heredada utilizando key().
Véase también key(), nativeKey() y isAttached().
[since 6.6] void QSharedMemory::setNativeKey(const QNativeIpcKey &key)
Establece la clave nativa, específica de la plataforma, key para este objeto de memoria compartida. Si key es la misma que la clave nativa actual, la función regresa sin hacer nada. En caso contrario, si el objeto de memoria compartida está unido a un segmento de memoria compartida subyacente, se detach de él antes de establecer la nueva clave. Esta función no hace un attach().
Esta función es útil si la clave nativa fue compartida desde otro proceso. Ver Claves IPC nativas para más información.
Las claves nativas portátiles pueden obtenerse usando platformSafeKey().
Puede llamar a nativeKey() para recuperar la clave nativa.
Esta función se introdujo en Qt 6.6.
Véase también nativeKey(), nativeIpcKey(), y isAttached().
void QSharedMemory::setNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs())
Establece la clave nativa, específica de la plataforma, key para este objeto de memoria compartida de tipo type (el parámetro de tipo ha estado disponible desde Qt 6.6). Si key es la misma que la clave nativa actual, la función retorna sin hacer nada. En caso contrario, si el objeto de memoria compartida está unido a un segmento de memoria compartida subyacente, se detach de él antes de establecer la nueva clave. Esta función no hace un attach().
Esta función es útil si la clave nativa fue compartida desde otro proceso, aunque la aplicación debe tener cuidado de asegurarse de que el tipo de clave coincide con lo que espera el otro proceso. Ver Claves IPC nativas para más información.
Las claves nativas portátiles pueden obtenerse utilizando platformSafeKey().
Puede llamar a nativeKey() para recuperar la clave nativa.
Véase también nativeKey(), nativeIpcKey(), y isAttached().
qsizetype QSharedMemory::size() const
Devuelve el tamaño del segmento de memoria compartida adjunto. Si no hay ningún segmento de memoria compartida adjunto, se devuelve 0.
Nota: El tamaño del segmento puede ser mayor que el tamaño solicitado que se pasó a create().
Véase también create() y attach().
bool QSharedMemory::unlock()
Libera el bloqueo del segmento de memoria compartida y devuelve true, si el bloqueo está actualmente en manos de este proceso. Si el segmento no está bloqueado, o si el bloqueo lo tiene otro proceso, no ocurre nada y se devuelve false.
Véase también lock().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.