Spec-Zone.ru › Qt 5.11

Класс QSharedMemory

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

Заголовок: #include <QSharedMemory>
qmake: QT += core
С момента: Qt 4.4
Наследует: QObject
  • Список всех членов, включая унаследованные

Типы

Перечисление AccessMode { ЧтениеТолько, ЧтениеЗапись }
Перечисление SharedMemoryError { НетОшибок, ОшибкаДоступа, НеверныйРазмер, НеверныйКлюч, ..., НеизвестнаяОшибка }

Открытые функции

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()
  • 32 открытых функций унаследованных от QObject

Дополнительные унаследованные члены

  • 1 свойство, унаследованное от QObject
  • 1 открытый слот, унаследованный от QObject
  • 2 сигнала, унаследованные от QObject
  • 11 статических открытых членов, унаследованных от QObject
  • 9 защищенных функций, унаследованных от QObject

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

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

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

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

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

[virtual] QSharedMemory::~QSharedMemory()

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

См. также 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() для этой совместно используемой памяти, или null-ключ, если ключ не назначен или сегмент использует 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(), чтобы получить независимый от платформы ключ. Внутренне, QSharedMemory преобразует этот ключ в платформенно-специфичный ключ. Если вы вызовете nativeKey(), вы получите преобразованный платформенно-специфичный ключ.

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

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

void QSharedMemory::setNativeKey(const QString &key)

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

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

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

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

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

END_OF_DOCUMENT_MARKER

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

int QSharedMemory::size() const

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

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

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

bool QSharedMemory::unlock()

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

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

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

Spec-Zone.ru

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