Spec-Zone.ru › Qt 5.9

Класс QSharedMemory

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

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

Открытые типы

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

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

QSharedMemory(const QString &key, QObject *parent = Q_NULLPTR)
QSharedMemory(QObject *parent = Q_NULLPTR)
~QSharedMemory()
bool attach(AccessMode mode = ReadWrite)
const void * constData() const
bool create(int size, AccessMode mode = ReadWrite)
void * data()
const void * data() const
bool detach()
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 Сегмент общей памяти доступен только для чтения. Запись в сегмент общей памяти запрещена. Попытка записи в сегмент общей памяти, созданный с помощью Только чтение, приведет к прерыванию программы.
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 = Q_NULLPTR)

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

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

QSharedMemory::QSharedMemory(QObject *parent = Q_NULLPTR)

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

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

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

QSharedMemory::~QSharedMemory()

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

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

bool QSharedMemory::attach(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, 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().

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 совпадает с текущим ключом, функция возвращается без каких-либо действий.

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

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

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

void QSharedMemory::setNativeKey(const QString &key)

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

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

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

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

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

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

END_OF_DOCUMENT_MARKER

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/qt-5.9/qsharedmemory.html

Spec-Zone.ru

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