Spec-Zone.ru › Qt 5.15

Класс QSharedMemory

Класс QSharedMemory предоставляет доступ к сегменту общей памяти. Подробнее...

Заголовок: #include <QSharedMemory>
qmake: QT += core
С версии: Qt 4.4
Наследует: QObject

Этот класс был представлен в Qt 4.4.

  • Список всех членов, включая наследуемые

Типы публичного доступа

перечисление AccessMode { ReadOnly, ReadWrite }
перечисление SharedMemoryError { NoError, PermissionDenied, InvalidSize, KeyError, AlreadyExists, …, UnknownError }

Публичные функции

QSharedMemory(const QString &key, QObject *parent = nullptr)
QSharedMemory(QObject *parent = nullptr)
виртуальный ~QSharedMemory()
bool attach(QSharedMemory::AccessMode mode = ReadWrite)
const void * constData() const
bool create(int 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()
QString nativeKey() const
void setKey(const QString &key)
void setNativeKey(const QString &key)
int size() const
bool unlock()

Подробное описание

QSharedMemory предоставляет доступ к сегменту общей памяти для нескольких потоков и процессов. Также он предоставляет возможность одному потоку или процессу заблокировать память для эксклюзивного доступа.

При использовании этого класса следует учитывать следующие различия между платформами:

  • Windows: QSharedMemory не «владеет» сегментом общей памяти. Когда все потоки или процессы, имеющие экземпляр QSharedMemory, прикреплённый к определённому сегменту общей памяти, либо уничтожили свой экземпляр QSharedMemory, либо завершили работу, ядро Windows автоматически освобождает сегмент общей памяти.
  • Unix: QSharedMemory «владеет» сегментом общей памяти. Когда последний поток или процесс, имеющий экземпляр QSharedMemory, прикреплённый к определённому сегменту общей памяти, отсоединяется от сегмента, уничтожив свой экземпляр QSharedMemory, ядро Unix освобождает сегмент общей памяти. Но если этот последний поток или процесс аварийно завершит работу без выполнения деструктора QSharedMemory, сегмент общей памяти сохранится после сбоя.
  • HP-UX: Допускается только одно подключение к сегменту общей памяти на процесс. Это означает, что QSharedMemory не следует использовать в нескольких потоках в одном процессе в HP-UX.

Не забудьте заблокировать общую память с помощью lock() перед чтением или записью в общую память и не забудьте разблокировать её с помощью unlock() после завершения работы.

QSharedMemory автоматически уничтожает сегмент общей памяти, когда последний экземпляр QSharedMemory отсоединяется от сегмента и ссылки на сегмент больше не остаются.

Предупреждение: QSharedMemory изменяет ключ специфическим для Qt способом, если не указано иное. Взаимодействие с приложениями, не являющимися Qt, достигается путём предварительного создания стандартной общей памяти с помощью QSharedMemory() и затем установки нативного ключа с помощью setNativeKey(). При использовании нативных ключей общая память не защищена от множественного доступа к ней (например, невозможно lock()) и следует использовать пользовательский механизм для достижения такой защиты.

Документация типов членов

перечисление QSharedMemory::AccessMode

Постоянная Значение Описание
QSharedMemory::ReadOnly 0 Сегмент общей памяти является только для чтения. Запись в сегмент общей памяти запрещена. Попытка записи в сегмент общей памяти, созданный с ReadOnly, приводит к завершению программы.
QSharedMemory::ReadWrite 1 Чтение и запись в сегмент общей памяти разрешены.

перечисление QSharedMemory::SharedMemoryError

Постоянная Значение Описание
QSharedMemory::NoError 0 Ошибка не произошла.
QSharedMemory::PermissionDenied 1 Операция не удалась, так как у вызывающего объекта отсутствовали необходимые права.
QSharedMemory::InvalidSize 2 Операция создания не удалась, так как указанный размер был недопустим.
QSharedMemory::KeyError 3 Операция не удалась из-за недопустимого ключа.
QSharedMemory::AlreadyExists 4 Операция create() не удалась, так как сегмент общей памяти с указанным ключом уже существовал.
QSharedMemory::NotFound 5 Операция attach() не удалась, так как сегмент общей памяти с указанным ключом не был найден.
QSharedMemory::LockError 6 Попытка lock() сегмента общей памяти не удалась, так как create() или attach() не удались и вернули false, или из-за системной ошибки в QSystemSemaphore::acquire().
QSharedMemory::OutOfResources 7 Операция create() не удалась, так как не было достаточно памяти для выполнения запроса.
QSharedMemory::UnknownError 8 Произошло что-то другое, и это было плохо.

Документация функций членов

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

Конструирует объект общей памяти с заданным parent и с установленным ключом key. Поскольку ключ установлен, могут быть вызваны функции create() и attach().

См. также setKey(), create() и attach().

QSharedMemory::QSharedMemory(QObject *parent = nullptr)

Эта функция перегружает QSharedMemory().

END_OF_DOCUMENT_MARKER

Создаёт объект общей памяти с заданным parent. Ключ объекта общей памяти не устанавливается конструктором, поэтому к объекту общей памяти не прикреплён сегмент общей памяти. Ключ необходимо установить с помощью setKey() или setNativeKey() перед использованием create() или attach().

См. также setKey().

[virtual] QSharedMemory::~QSharedMemory()

Деструктор очищает ключ, что заставляет объект общей памяти отсоединиться от его сегмента общей памяти. Если этот объект общей памяти является последним подключённым к сегменту общей памяти, операция отсоединения() уничтожает сегмент общей памяти.

См. также detach() и isAttached().

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

Попытка подключить процесс к сегменту общей памяти, идентифицируемому ключом, переданным конструктору или вызову setKey() или setNativeKey(). Режим доступа mode по умолчанию ReadWrite. Также может быть ReadOnly. Возвращает true, если операция подключения успешна. Если возвращается false, вызовите error(), чтобы определить произошедшую ошибку. После подключения к сегменту общей памяти указатель на общую память можно получить, вызвав data().

См. также isAttached(), detach() и create().

const void *QSharedMemory::constData() const

Возвращает константный указатель на содержимое сегмента общей памяти, если он присоединён. В противном случае возвращает null. Не забудьте заблокировать общую память с помощью lock() перед чтением или записью в общую память и не забудьте разблокировать её с помощью unlock() после завершения.

См. также attach() и create().

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

Создаёт сегмент общей памяти размером size байт с ключом, переданным конструктору, установленным с помощью setKey() или setNativeKey(), затем подключается к новому сегменту общей памяти с заданным режимом доступа mode и возвращает true. Если сегмент общей памяти, идентифицируемый ключом, уже существует, операция подключения не выполняется и возвращается false. Когда возвращается false, вызовите error(), чтобы определить, какая произошла ошибка.

См. также error().

void *QSharedMemory::data()

Возвращает указатель на содержимое сегмента общей памяти, если он присоединён. В противном случае возвращает null. Не забудьте заблокировать общую память с помощью lock() перед чтением или записью в общую память и не забудьте разблокировать её с помощью unlock() после завершения.

См. также attach().

const void *QSharedMemory::data() const

Эта функция перегружает data().

bool QSharedMemory::detach()

Отсоединяет процесс от сегмента общей памяти. Если это был последний процесс, подключённый к сегменту общей памяти, то сегмент общей памяти освобождается системой, то есть содержимое уничтожается. Функция возвращает true если отсоединение от сегмента общей памяти произошло успешно. Если возвращается false, обычно это означает, что сегмент либо не подключён, либо заблокирован другим процессом.

См. также attach() и isAttached().

QSharedMemory::SharedMemoryError QSharedMemory::error() const

Возвращает значение, указывающее, произошла ли ошибка, и, если да, то какая именно.

См. также errorString().

QString QSharedMemory::errorString() const

Возвращает текстовое описание последней произошедшей ошибки. Если error() возвращает значение ошибки, вызовите эту функцию, чтобы получить текстовую строку, описывающую ошибку.

См. также error().

bool QSharedMemory::isAttached() const

Возвращает true если этот процесс подключен к сегменту общей памяти.

См. также attach() и detach().

QString QSharedMemory::key() const

Возвращает ключ, назначенный с помощью setKey() для этого объекта общей памяти, или пустой ключ, если ключ не был назначен или сегмент использует nativeKey(). Ключ — это идентификатор, используемый приложениями Qt для идентификации сегмента общей памяти.

Вы можете получить системный, специфичный для платформы, ключ, используемый операционной системой, вызвав nativeKey().

См. также setKey() и setNativeKey().

bool QSharedMemory::lock()

Это семафор, который блокирует сегмент общей памяти для доступа этим процессом и возвращает true. Если другой процесс заблокировал сегмент, эта функция блокируется до тех пор, пока блокировка не будет освобождена. Затем она приобретает блокировку и возвращает true. Если эта функция возвращает false, это означает, что вы проигнорировали ложное возвращение из create() или attach(), что вы установили ключ с помощью setNativeKey() или что QSystemSemaphore::acquire() не удалось из-за неизвестной системной ошибки.

См. также unlock(), data() и QSystemSemaphore::acquire().

QString QSharedMemory::nativeKey() const

Возвращает системный, специфичный для платформы, ключ для этого объекта общей памяти. Системный ключ — это идентификатор, используемый операционной системой для идентификации сегмента общей памяти.

Вы можете использовать системный ключ для доступа к сегментам общей памяти, которые не были созданы Qt, или для предоставления доступа к общей памяти не-Qt приложениям.

Эта функция была добавлена в Qt 4.8.

См. также setKey() и setNativeKey().

void QSharedMemory::setKey(const QString &key)

Устанавливает независимый от платформы key для этого объекта общей памяти. Если key совпадает с текущим ключом, функция возвращается без выполнения каких-либо действий.

Вы можете вызвать key(), чтобы получить независимый от платформы ключ. Внутренне QSharedMemory преобразует этот ключ в системный ключ.

Если объект общей памяти подключен к сегменту общей памяти, он отсоединится от него перед установкой нового ключа. Эта функция не выполняет attach().

См. также key(), nativeKey() и isAttached().

void QSharedMemory::setNativeKey(const QString &key)

Устанавливает системный, специфичный для платформы, key для этого объекта общей памяти. Если key совпадает с текущим системным ключом, функция возвращается без выполнения каких-либо действий. Если вы хотите только назначить ключ сегменту, вы должны вызвать setKey() вместо этого.

Вы можете вызвать nativeKey(), чтобы получить системный ключ. Если был задан системный ключ, вызов key() вернёт пустую строку.

Если объект общей памяти подключен к сегменту общей памяти, он отсоединится от него перед установкой нового ключа. Эта функция не выполняет attach().

Приложение не будет переносимым, если вы установите системный ключ.

Эта функция была добавлена в Qt 4.8.

См. также nativeKey(), key() и isAttached().

int QSharedMemory::size() const

Возвращает размер присоединённого сегмента общей памяти. Если сегмент общей памяти не подключён, возвращается 0.

Примечание: Размер сегмента может быть больше, чем запрашиваемый размер, переданный в create().

См. также create() и attach().

bool QSharedMemory::unlock()

Освобождает блокировку сегмента общей памяти и возвращает true, если блокировка в данный момент удерживается этим процессом. Если сегмент не заблокирован или если блокировка удерживается другим процессом, ничего не происходит, и возвращается false.

См. также lock().

END_OF_DOCUMENT_MARKER

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qsharedmemory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API