Sur cette page

QSharedMemory Class

La classe QSharedMemory permet d'accéder à un segment de mémoire partagée. Plus d'informations...

En-tête : #include <QSharedMemory>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Héritages : 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 en utilisant platformSafeKey().

Un objet QSharedMemory doit create() le segment et cet appel spécifie la taille du segment. Tous les autres processus se contentent de attach() sur le segment qui doit déjà exister. Après la réussite de l'une ou l'autre opération, l'application peut appeler data() pour obtenir un pointeur sur 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 avec lock() avant de lire ou d'écrire dans la mémoire partagée, mais n'oubliez pas de libérer le verrou avec unlock() une fois que vous avez terminé.

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

Pour plus de détails sur les types de clés, les limitations spécifiques aux plates-formes et l'interopérabilité avec des applications plus anciennes ou non Qt, voir la documentation sur les clés IPC natives. Cela inclut des informations importantes pour les applications en bac à sable sur les plateformes Apple, y compris toutes les applications obtenues via l'App Store d'Apple.

Voir également Communication inter-processus et QSystemSemaphore.

Documentation sur les types de membres

enum QSharedMemory::AccessMode

ConstanteValeurDescription du segment de mémoire partagée
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. Une tentative d'écriture dans un segment de mémoire partagée créé avec ReadOnly entraîne l'abandon du programme.
QSharedMemory::ReadWrite1La lecture et l'écriture du segment de mémoire partagée sont toutes deux autorisées.

enum QSharedMemory::SharedMemoryError

ConstanteValeurDescription de l'erreur
QSharedMemory::NoError0Aucune erreur n'est survenue.
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 avec la clé spécifiée existait déjà.
QSharedMemory::NotFound5Une opération attach() a échoué car un segment de mémoire partagée avec la clé spécifiée n'a pas pu être trouvé.
QSharedMemory::LockError6La tentative de lock() du segment de mémoire partagée a échoué parce que create() ou attach() a échoué et a renvoyé un message faux, ou parce qu'une erreur système s'est produite dans QSystemSemaphore::acquire().
QSharedMemory::OutOfResources7Une opération create() a échoué parce qu'il n'y avait pas assez de mémoire disponible pour répondre à la demande.
QSharedMemory::UnknownError8Quelque chose d'autre s'est produit et c'était mauvais.

Documentation sur les fonctions membres

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

Construit un objet de mémoire partagée avec la valeur parent et avec la clé d'héritage fixée à key. Comme sa clé est fixée, ses fonctions create() et attach() peuvent être appelées.

Voir aussi setKey(), create() et attach().

QSharedMemory::QSharedMemory(QObject *parent = nullptr)

Construit un objet à mémoire partagée avec la valeur parent. La clé de l'objet de mémoire partagée n'est pas définie par le constructeur, de sorte que l'objet de mémoire partagée n'a pas de segment de mémoire partagée sous-jacent. La clé doit être définie avec setNativeKey() avant que create() ou attach() puisse être utilisé.

Cette fonction surcharge QSharedMemory::QSharedMemory().

Voir également setNativeKey().

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

Construit un objet de mémoire partagée avec la valeur parent et avec la clé key. Comme la clé est définie, les fonctions create() et attach() peuvent être appelées.

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

Voir aussi setNativeKey(), create() et attach().

[virtual noexcept] QSharedMemory::~QSharedMemory()

Le destructeur efface la clé, ce qui force l'objet de mémoire partagée à detach de son segment de mémoire partagée sous-jacent. Si cet objet de mémoire partagée est le dernier 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'attacher le processus au segment de mémoire partagée identifié par la clé passée au constructeur ou à un appel à setNativeKey(). L'accès mode est ReadWrite par défaut. Il peut également s'agir de ReadOnly. Renvoie true si l'opération d'attachement est réussie. Si false est renvoyé, appelez error() pour déterminer l'erreur qui s'est produite. Après avoir attaché le segment de mémoire partagée, un pointeur sur la mémoire partagée peut être obtenu en appelant data().

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

const void *QSharedMemory::constData() const

Renvoie un pointeur constant sur le contenu du segment de mémoire partagée, s'il y en a un. Sinon, il renvoie null. La valeur renvoyée par cette fonction ne changera pas jusqu'à ce qu'un detach se produise, il est donc prudent de stocker ce pointeur.

Si les opérations de mémoire ne sont pas atomiques, vous pouvez verrouiller la mémoire partagée avec lock() avant de lire ou d'écrire, mais n'oubliez pas de libérer le verrou avec unlock() une fois que vous avez terminé.

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é passée au constructeur ou définie avec setNativeKey(), puis l'attache au nouveau segment de mémoire partagée avec l'accès donné mode et renvoie 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 false est renvoyé. Lorsque la valeur de retour est false, appelez error() pour déterminer l'erreur qui s'est produite.

Voir également error().

void *QSharedMemory::data()

Renvoie un pointeur sur le contenu du segment de mémoire partagée, s'il y en a un. Sinon, il renvoie null. La valeur renvoyée par cette fonction ne changera pas jusqu'à ce qu'un detach se produise, il est donc prudent de stocker ce pointeur.

Si les opérations de mémoire ne sont pas atomiques, vous pouvez verrouiller la mémoire partagée avec lock() avant de lire ou d'écrire, mais n'oubliez pas de libérer le verrou avec unlock() une fois que vous avez terminé.

Voir également attach().

const void *QSharedMemory::data() const

Cette fonction surcharge QSharedMemory::data().

bool QSharedMemory::detach()

Détache le processus du segment de mémoire partagée. S'il s'agit du dernier processus attaché au segment de mémoire partagée, celui-ci est 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 aussi 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 aussi errorString().

QString QSharedMemory::errorString() const

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

Voir aussi error().

bool QSharedMemory::isAttached() const

Renvoie true si ce processus est attaché au segment de mémoire partagée.

Voir aussi attach() et detach().

QString QSharedMemory::key() const

Renvoie la clé patrimoniale assignée avec setKey() à cette mémoire partagée, ou une clé nulle si aucune clé n'a été assignée, ou si le segment utilise un nativeKey(). La clé est l'identifiant utilisé par les applications Qt pour identifier le segment de mémoire partagée.

Vous pouvez trouver la clé native, spécifique à la plate-forme, utilisée par le système d'exploitation en appelant nativeKey().

Voir aussi setKey() et setNativeKey().

bool QSharedMemory::lock()

Il s'agit d'un sémaphore qui verrouille le segment de mémoire partagée pour l'accès de ce processus et renvoie true. Si un autre processus a verrouillé le segment, cette fonction se bloque jusqu'à ce que le verrou soit libéré. Ensuite, elle acquiert le verrou et renvoie true. Si cette fonction renvoie false, cela signifie que vous avez ignoré un faux retour 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 aussi unlock(), data() et QSystemSemaphore::acquire().

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

Renvoie le type de clé pour cet objet de mémoire partagée. Le type de clé complète le 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 aussi 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 l'ancienne adresse key pour cet objet de mémoire partagée. Si key est identique à la clé actuelle, la fonction retourne sans rien faire. Dans le cas contraire, si l'objet de mémoire partagée est attaché à un segment de mémoire partagée sous-jacent, il en sera extrait par detach avant de définir la nouvelle clé. Cette fonction n'effectue pas de attach().

Vous pouvez appeler key() pour récupérer l'ancienne clé. Cette fonction est essentiellement la même que la fonction :

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

sauf qu'elle permet d'obtenir la clé héritée à l'aide de key().

Voir aussi key(), nativeKey() et isAttached().

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

Définit la clé native, spécifique à la plate-forme, key pour cet objet de mémoire partagée. Si key est identique à la clé native actuelle, la fonction retourne sans rien faire. Dans le cas contraire, si l'objet de mémoire partagée est attaché à un segment de mémoire partagée sous-jacent, il en sera extrait par detach avant de définir la nouvelle clé. Cette fonction n'effectue pas de attach().

Cette fonction est utile si la clé native a été partagée par 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 nativeKey() pour récupérer la clé native.

Cette fonction a été introduite dans Qt 6.6.

Voir aussi nativeKey(), nativeIpcKey(), et isAttached().

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

Définit la clé native, spécifique à la plate-forme, key 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 retourne sans rien faire. Sinon, si l'objet de mémoire partagée est attaché à un segment de mémoire partagée sous-jacent, il sera detach avant de définir la nouvelle clé. Cette fonction n'effectue pas de attach().

Cette fonction est utile si la clé native a été partagée par un autre processus, bien que l'application doive veiller à ce que le type de clé corresponde à ce que l'autre processus attend. 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 attaché. Si aucun segment de mémoire partagée n'est attaché, 0 est renvoyé.

Note : La taille du segment peut être plus grande que la taille demandée qui a été passée à create().

Voir aussi create() et attach().

bool QSharedMemory::unlock()

Libère le verrou sur le segment de mémoire partagée et renvoie true, si le 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, rien ne se passe et false est renvoyé.

Voir aussi 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.