Sur cette page

QSharedMemory Class

La classe `QSharedMemory` permet d'accéder à un segment de mémoire partagée. En savoir plus...

En-tête : #include <QSharedMemory>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérite de : QObject

Types publics

enum AccessMode { ReadOnly, ReadWrite }
enum SharedMemoryError { NoError, PermissionDenied, InvalidSize, KeyError, AlreadyExists, …, UnknownError }

Fonctions publiques

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()

Description détaillée

QSharedMemory permet à plusieurs threads et processus d'accéder à un segment de mémoire partagée. Les segments de mémoire partagée sont identifiés par une clé, représentée par QNativeIpcKey. Une clé peut être créée de manière multiplateforme à l'aide de platformSafeKey().

Un objet QSharedMemory doit appeler ` create()` pour créer le segment ; cet appel spécifie la taille du segment. Tous les autres processus appellent simplement ` attach()` pour accéder au segment, qui doit déjà exister. Une fois l’une ou l’autre de ces opérations réussie, l’application peut appeler ` data()` pour obtenir un pointeur vers les données.

Pour prendre en charge les opérations non atomiques, QSharedMemory fournit une API permettant d’obtenir un accès exclusif : vous pouvez verrouiller la mémoire partagée à l’aide de ` lock()` avant de lire ou d’écrire dans celle-ci, mais n’oubliez pas de libérer le verrou à l’aide de ` unlock()` une fois l’opération terminée.

Par défaut, QSharedMemory détruit automatiquement le segment de mémoire partagée lorsque la dernière instance de QSharedMemory est libérée ( detached ) du segment et qu’il ne reste plus aucune référence à ce segment.

Pour plus de détails sur les types de clés, les limitations spécifiques à chaque plateforme et l’interopérabilité avec des applications plus anciennes ou non Qt, consultez la documentation sur les clés IPC natives. Celle-ci contient des informations importantes concernant les applications en mode sandbox sur les plateformes Apple, y compris toutes les applications obtenues via l’App Store d’Apple.

Voir également Communication interprocessus et QSystemSemaphore.

Documentation sur les types de membres

enum QSharedMemory::AccessMode

ConstanteValeurDescription
QSharedMemory::ReadOnly0Le segment de mémoire partagée est en lecture seule. L'écriture dans le segment de mémoire partagée n'est pas autorisée. Toute tentative d'écriture dans un segment de mémoire partagée créé avec ReadOnly entraîne l'interruption du programme.
QSharedMemory::ReadWrite1La lecture et l’écriture dans le segment de mémoire partagée sont toutes deux autorisées.

enum QSharedMemory::SharedMemoryError

ConstanteValeurDescription
QSharedMemory::NoError0Aucune erreur ne s'est produite.
QSharedMemory::PermissionDenied1L'opération a échoué car l'appelant ne disposait pas des autorisations requises.
QSharedMemory::InvalidSize2Une opération de création a échoué car la taille demandée n'était pas valide.
QSharedMemory::KeyError3L'opération a échoué en raison d'une clé non valide.
QSharedMemory::AlreadyExists4Une opération create() a échoué car un segment de mémoire partagée portant la clé spécifiée existait déjà.
QSharedMemory::NotFound5L'opération ` attach()` a échoué car le segment de mémoire partagée associé à la clé spécifiée est introuvable.
QSharedMemory::LockError6La tentative de création ( lock()) du segment de mémoire partagée a échoué car la fonction create() ou attach() a échoué et renvoyé la valeur false, ou car une erreur système s'est produite dans QSystemSemaphore::acquire().
QSharedMemory::OutOfResources7Une opération create() a échoué car la mémoire disponible était insuffisante pour répondre à la requête.
QSharedMemory::UnknownError8Un autre événement indésirable s’est produit.

Documentation des fonctions membres

QSharedMemory::QSharedMemory(const QString &key, QObject *parent = nullptr)

Crée un objet de mémoire partagée avec l’ parent indiquée et la clé « legacy » définie sur key. Comme sa clé est définie, ses fonctions create() et attach() peuvent être appelées.

Voir également setKey(), create() et attach().

QSharedMemory::QSharedMemory(QObject *parent = nullptr)

Crée un objet de mémoire partagée avec l'parent donné. La clé de l'objet de mémoire partagée n'est pas définie par le constructeur ; par conséquent, aucun segment de mémoire partagée sous-jacent n'est associé à cet objet. La clé doit être définie à l'aide de la fonction setNativeKey() avant de pouvoir utiliser les fonctions create() ou attach().

Cette fonction surcharge la fonction QSharedMemory::QSharedMemory().

Voir également setNativeKey().

QSharedMemory::QSharedMemory(const QNativeIpcKey &key, QObject *parent = nullptr)

Crée un objet de mémoire partagée avec l'parent on fournie et dont la clé est définie sur key. Sa clé étant définie, ses fonctions create() et attach() peuvent être appelées.

Il s’agit d’une fonction surchargée.

Voir également setNativeKey(), create() et attach().

[virtual noexcept] QSharedMemory::~QSharedMemory()

Le destructeur efface la clé, ce qui force l'objet de mémoire partagée à se « dé detach r » de son segment de mémoire partagée sous-jacent. Si cet objet de mémoire partagée est le dernier à être connecté au segment de mémoire partagée, l'opération detach() détruit le segment de mémoire partagée.

Voir également detach() et isAttached().

bool QSharedMemory::attach(QSharedMemory::AccessMode mode = ReadWrite)

Tente d’associer le processus au segment de mémoire partagée identifié par la clé transmise au constructeur ou lors d’un appel à la fonction ` setNativeKey()`. L’ mode d’accès est ` ReadWrite ` par défaut. Elle peut également être ` ReadOnly`. Renvoie ` true ` si l’opération d’association réussit. Si la valeur renvoyée est « false », appelez error() pour déterminer quelle erreur s’est produite. Une fois le segment de mémoire partagée attaché, un pointeur vers cette mémoire peut être obtenu en appelant data().

Voir également isAttached(), detach() et create().

const void *QSharedMemory::constData() const

Renvoie un pointeur const vers le contenu du segment de mémoire partagée, s'il y en a un associé. Sinon, elle renvoie null. La valeur renvoyée par cette fonction ne changera pas tant qu'un appel à ` detach ` n'aura pas été effectué ; il est donc possible de stocker ce pointeur en toute sécurité.

Si les opérations sur la mémoire ne sont pas atomiques, vous pouvez verrouiller la mémoire partagée avec ` lock()` avant toute lecture ou écriture, mais n'oubliez pas de libérer le verrou avec ` unlock()` une fois l'opération terminée.

Voir également attach() et create().

bool QSharedMemory::create(qsizetype size, QSharedMemory::AccessMode mode = ReadWrite)

Crée un segment de mémoire partagée de size octets avec la clé transmise au constructeur ou définie à l'aide de la fonction setNativeKey(), puis s'attache au nouveau segment de mémoire partagée avec l'mode d'accès spécifiée et renvoie la valeur true. Si un segment de mémoire partagée identifié par la clé existe déjà, l'opération d'attachement n'est pas effectuée et la valeur false est renvoyée. Lorsque la valeur renvoyée est false, appelez la fonction error() pour déterminer quelle erreur s'est produite.

Voir également error().

void *QSharedMemory::data()

Renvoie un pointeur vers le contenu du segment de mémoire partagée, s'il y en a un associé. Sinon, elle renvoie null. La valeur renvoyée par cette fonction ne changera pas tant qu'un appel à ` detach ` n'aura pas été effectué ; vous pouvez donc stocker ce pointeur en toute sécurité.

Si les opérations sur la mémoire ne sont pas atomiques, vous pouvez verrouiller la mémoire partagée à l’aide de ` lock()` avant toute lecture ou écriture, mais n’oubliez pas de libérer le verrou à l’aide de ` unlock()` une fois l’opération terminée.

Voir également attach().

const void *QSharedMemory::data() const

Cette fonction surcharge la méthode ` QSharedMemory::data()`.

bool QSharedMemory::detach()

Détache le processus du segment de mémoire partagée. Si ce processus était le dernier à être attaché à ce segment, celui-ci est alors libéré par le système, c'est-à-dire que son contenu est détruit. La fonction renvoie ` true ` si elle détache le segment de mémoire partagée. Si elle renvoie ` false`, cela signifie généralement que le segment n'est pas attaché ou qu'il est verrouillé par un autre processus.

Voir également attach() et isAttached().

QSharedMemory::SharedMemoryError QSharedMemory::error() const

Renvoie une valeur indiquant si une erreur s'est produite et, le cas échéant, de quelle erreur il s'agit.

Voir également errorString().

QString QSharedMemory::errorString() const

Renvoie une description textuelle de la dernière erreur survenue. Si la fonction error() renvoie un objet de type ` error value`, appelez cette fonction pour obtenir une chaîne de caractères décrivant l'erreur.

Voir également error().

bool QSharedMemory::isAttached() const

Renvoie « true » si ce processus est associé au segment de mémoire partagée.

Voir également attach() et detach().

QString QSharedMemory::key() const

Renvoie la clé héritée attribuée à cette mémoire partagée via la fonction ` setKey()` ; renvoie une clé nulle si aucune clé n’a été attribuée ou si le segment utilise la fonction ` nativeKey()`. La clé est l’identifiant utilisé par les applications Qt pour identifier le segment de mémoire partagée.

Vous pouvez obtenir la clé native, spécifique à la plateforme, utilisée par le système d’exploitation en appelant la fonction ` nativeKey()`.

Voir également setKey() et setNativeKey().

bool QSharedMemory::lock()

Il s'agit d'un sémaphore qui verrouille le segment de mémoire partagée pour permettre son accès par ce processus et renvoie la valeur « true ». Si un autre processus a verrouillé le segment, cette fonction se bloque jusqu'à ce que le verrou soit libéré. Elle acquiert ensuite le verrou et renvoie true. Si cette fonction renvoie false, cela signifie que vous avez ignoré un retour « false » de create() ou attach(), que vous avez défini la clé avec setNativeKey() ou que QSystemSemaphore::acquire() a échoué en raison d’une erreur système inconnue.

Voir également unlock(), data() et QSystemSemaphore::acquire().

[since 6.6] QNativeIpcKey QSharedMemory::nativeIpcKey() const

Renvoie le type de clé associé à cet objet de mémoire partagée. Ce type de clé complète la fonction ` nativeKey()` en tant qu'identifiant utilisé par le système d'exploitation pour identifier le segment de mémoire partagée.

Vous pouvez utiliser la clé native pour accéder à des segments de mémoire partagée qui n’ont pas été créés par Qt, ou pour accorder l’accès à la mémoire partagée à des applications non-Qt. Voir Clés IPC natives pour plus d’informations.

Cette fonction a été introduite dans Qt 6.6.

Voir également ` nativeKey()` et ` setNativeKey()`.

QString QSharedMemory::nativeKey() const

Renvoie la clé native, spécifique à la plate-forme, de cet objet de mémoire partagée. La clé native est l'identifiant utilisé par le système d'exploitation pour identifier le segment de mémoire partagée.

Vous pouvez utiliser la clé native pour accéder à des segments de mémoire partagée qui n’ont pas été créés par Qt, ou pour accorder l’accès à la mémoire partagée à des applications non Qt. Voir Clés IPC natives pour plus d’informations.

Voir également ` setNativeKey()` et ` nativeIpcKey()`.

void QSharedMemory::setKey(const QString &key)

Définit la clé héritée ( key ) de cet objet de mémoire partagée. Si la clé héritée ( key ) est identique à la clé actuelle, la fonction se termine sans effectuer d’opération. Dans le cas contraire, si l’objet de mémoire partagée est associé à un segment de mémoire partagée sous-jacent, il se « detach » de celui-ci avant de définir la nouvelle clé. Cette fonction n’effectue pas d’appel à ` attach()`.

Vous pouvez appeler key() pour récupérer l’ancienne clé. Cette fonction est pratiquement identique à :

shm.setNativeKey(QSharedMemory::legacyNativeKey(key));

à l’exception qu’elle permet d’obtenir l’ancienne clé à l’aide de key().

Voir également key(), nativeKey() et isAttached().

[since 6.6] void QSharedMemory::setNativeKey(const QNativeIpcKey &key)

Définit la clé native spécifique à la plateforme ( key ) pour cet objet de mémoire partagée. Si ` key ` correspond à la clé native actuelle, la fonction se termine sans effectuer d'opération. Sinon, si l'objet de mémoire partagée est associé à un segment de mémoire partagée sous-jacent, il se dés detach ra de celui-ci avant de définir la nouvelle clé. Cette fonction n'appelle pas la fonction ` attach()`.

Cette fonction est utile si la clé native a été partagée à partir d’un autre processus. Voir Clés IPC natives pour plus d’informations.

Les clés natives portables peuvent être obtenues à l’aide de `platformSafeKey()`.

Vous pouvez appeler la fonction ` nativeKey()` pour récupérer la clé native.

Cette fonction a été introduite dans Qt 6.6.

Voir également nativeKey(), nativeIpcKey() et isAttached().

void QSharedMemory::setNativeKey(const QString &key, QNativeIpcKey::Type type = QNativeIpcKey::legacyDefaultTypeForOs())

Définit l’ key, spécifique à la plateforme, pour cet objet de mémoire partagée de type type (le paramètre de type est disponible depuis Qt 6.6). Si key est identique à la clé native actuelle, la fonction se termine sans effectuer d’opération. Sinon, si l’objet de mémoire partagée est associé à un segment de mémoire partagée sous-jacent, il se « detach » de celui-ci avant de définir la nouvelle clé. Cette fonction n’effectue pas d’appel à ` attach()`.

Cette fonction est utile si la clé native a été partagée depuis un autre processus, bien que l’application doive veiller à ce que le type de clé corresponde à celui attendu par l’autre processus. Voir Clés IPC natives pour plus d’informations.

Les clés natives portables peuvent être obtenues à l'aide de `platformSafeKey()`.

Vous pouvez appeler ` nativeKey()` pour récupérer la clé native.

Voir également nativeKey(), nativeIpcKey() et isAttached().

qsizetype QSharedMemory::size() const

Renvoie la taille du segment de mémoire partagée associé. Si aucun segment de mémoire partagée n'est associé, la fonction renvoie 0.

Remarque : la taille du segment peut être supérieure à la taille demandée qui a été transmise à la fonction create().

Voir également create() et attach().

bool QSharedMemory::unlock()

Libère le verrou sur le segment de mémoire partagée et renvoie ` true` si ce verrou est actuellement détenu par ce processus. Si le segment n'est pas verrouillé ou si le verrou est détenu par un autre processus, aucune action n'est effectuée et la valeur `false` est renvoyée.

Voir également ` 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.