QSharedMemory Class

QSharedMemory クラスは、共有メモリー・セグメントへのアクセスを提供します。詳細...

ヘッダー #include <QSharedMemory>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承: QObject

パブリックな型

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

パブリック関数

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

詳細説明

QSharedMemory は、複数のスレッドやプロセスによる共有メモリセグメントへのアクセスを提供します。共有メモリセグメントは、QNativeIpcKey で表されるキーによって識別されます。キーは、platformSafeKey() を使用することで、クロスプラットフォームで作成できます。

1 つの QSharedMemory オブジェクトがセグメントをcreate() する必要があり、この呼び出しによってセグメントのサイズが指定されます。他のすべてのプロセスは、すでに存在するはずのセグメントに対してattach() を実行するだけです。どちらの操作が成功しても、アプリケーションはdata() を呼び出して、データへのポインタを取得できます。

unlock非アトミック操作をサポートするために、QSharedMemory は排他アクセスを得るための API を提供しています。共有メモリからの読み取りや共有メモリへの書き込みを行う前に、lock() で共有メモリをロックすることができます。

デフォルトでは、QSharedMemory は、セグメントから QSharedMemory の最後のインスタンスdetached が削除され、セグメントへの参照がなくなると、共有メモリ・セグメントを自動的に破棄します。

キーの種類、プラットフォーム固有の制限、古いアプリケーションや Qt 以外のアプリケーションとの相互運用性の詳細については、Native IPC Keys のドキュメントを参照してください。これには、Apple App Store経由で入手したすべてのアプリを含む、Appleプラットフォーム上のサンドボックス・アプリケーションに関する重要な情報も含まれています。

プロセス間通信と QSystemSemaphoreも参照してください

メンバ型ドキュメント

enum QSharedMemory::AccessMode

定数説明
QSharedMemory::ReadOnly0共有メモリセグメントは読み取り専用である。共有メモリ・セグメントへの書き込みは許可されていません。ReadOnlyで作成された共有メモリ・セグメントへの書き込みを試みると、プログラムが異常終了する。
QSharedMemory::ReadWrite1共有メモリ・セグメントの読み取りと書き込みの両方が許可される。

enum QSharedMemory::SharedMemoryError

定数説明
QSharedMemory::NoError0エラーは発生しませんでした。
QSharedMemory::PermissionDenied1呼び出し元が必要な権限を持っていなかったため、操作に失敗しました。
QSharedMemory::InvalidSize2要求されたサイズが無効なため、作成操作に失敗しました。
QSharedMemory::KeyError3キーが無効なため、操作に失敗しました。
QSharedMemory::AlreadyExists4指定されたキーを持つ共有メモリ・セグメントが既に存在したため、create ()操作に失敗しました。
QSharedMemory::NotFound5指定されたキーを持つ共有メモリ・セグメントが見つからなかったため、attach() 操作に失敗しました。
QSharedMemory::LockError6create() またはattach() が失敗して false を返したか、QSystemSemaphore::acquire() でシステム・エラーが発生したため、共有メモリ・セグメントのlock() の試行に失敗しました。
QSharedMemory::OutOfResources7要求を満たすのに十分なメモリがないため、create() 操作に失敗しました。
QSharedMemory::UnknownError8他の何かが発生し、それが悪かった。

メンバ関数のドキュメント

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

指定されたparent と、レガシー・キーがkey に設定された共有メモリ・オブジェクトを構築する。 キーが設定されているため、create() とattach() 関数を呼び出すことができる。

setKey()、create()、attach()も参照

QSharedMemory::QSharedMemory(QObject *parent = nullptr)

この関数は QSharedMemory()をオーバーロードする。

与えられたparent で共有メモリ・オブジェクトを構築します。共有メモリ・オブジェクトのキーはコンストラクタによって設定されないため、共有メモリ・オブジェクトは、基礎となる共有メモリ・セグメントを持ちません。create() またはattach() を使用する前に、setNativeKey() でキーを設定する必要があります。

setNativeKey()も参照

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

これはオーバーロードされた関数である。

指定されたparent と、そのキーがkey に設定された共有メモリ・オブジェクトを構築します。 キーが設定されているため、create() とattach() 関数を呼び出すことができます。

setNativeKey()、create()、attach()も参照してください

[virtual noexcept] QSharedMemory::~QSharedMemory()

デストラクタはキーをクリアし、共有メモリ・オブジェクトをその下にある共有メモリ・セグメントから強制的にdetach 。この共有メモリ・オブジェクトが共有メモリ・セグメントに接続されている最後のものである場合、detach ()操作は共有メモリ・セグメントを破壊する。

detach() およびisAttached()も参照のこと

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

コンストラクタまたはsetNativeKey() への呼び出しに渡されたキーで識別される共有メモリ・セグメントにプロセスをアタッチしようとする。アクセスmode は、デフォルトではReadWrite である。ReadOnly にすることもできる。アタッチ操作が成功した場合はtrue を返す。false が返された場合は、error() を呼び出して、どのエラーが発生したかを調べます。共有メモリ・セグメントをアタッチした後、data() を呼び出すと、共有メモリへのポインタを取得できます。

isAttached()、detach()、create()も参照

const void *QSharedMemory::constData() const

共有メモリセグメントがあれば、その内容への const ポインタを返す。そうでない場合はnullを返す。この関数が返す値は、detach が発生するまで変更されないので、このポインタを保存しておいても安全である。

unlockメモリ操作がアトミックでない場合は、読み書きする前にlock() で共有メモリをロックしてもよい。

attach() およびcreate()も参照

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

size バイトの共有メモリ・セグメントを、コンストラクタに渡されたキー、またはsetNativeKey() で設定されたキーで作成し、指定されたアクセスmode で新しい共有メモリ・セグメントにアタッチして、true を返す。キーで識別される共有メモリセグメントが既に存在する場合、アタッチ操作は実行されず、false が返される。戻り値がfalse の場合、error() を呼び出して、どのエラーが発生したかを判断する。

error()も参照のこと

void *QSharedMemory::data()

共有メモリー・セグメントがあれば、その内容へのポインターを返す。そうでない場合はnullを返す。この関数が返す値は、detach が発生するまで変更されないので、このポインタを保存しておいても安全である。

unlockメモリ操作がアトミックでない場合は、読み書きする前にlock() で共有メモリをロックしてもよい。

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 value を返した場合、この関数を呼び出して、エラーを説明するテキスト文字列を取得する。

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()も参照

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

この共有メモリー・オブジェクトのキー・タイプを返す。キータイプは、オペレーティングシステムが共有メモリセグメントを識別するために使用する識別子としてnativeKey() を補完します。

ネイティブ・キーを使用して、Qt によって作成されていない共有メモリ・セグメントにアクセスしたり、Qt 以外のアプリケーションに共有メモリ・アクセスを許可したりすることができます。詳細はネイティブ IPC キーを参照してください。

この関数は Qt 6.6 で導入されました。

nativeKey() およびsetNativeKey()も参照してください

QString QSharedMemory::nativeKey() const

この共有メモリー・オブジェクトの、プラットフォーム固有のネイティブ・キーを返します。ネイティブキーは、オペレーティングシステムが共有メモリセグメントを識別するために使用する識別子です。

ネイティブキーを使用すると、Qt によって作成されていない共有メモリセグメントにアクセスしたり、Qt 以外のアプリケーションに共有メモリへのアクセスを許可したりすることができます。詳しくはネイティブ IPC キーを参照してください。

setNativeKey() およびnativeIpcKey()も参照してください

void QSharedMemory::setKey(const QString &key)

これはオーバーロードされた関数です。

この共有メモリー・オブジェクトのレガシーkey を設定します。key が現在のキーと同じ場合、この関数は何もせずに戻ります。そうでない場合、共有メモリ・オブジェクトが基礎となる共有メモリ・セグメントにアタッチされていれば、新しいキーを設定する前に、そのセグメントからdetach を取得します。この関数は、attach ()を実行しません。

レガシー・キーを取得するには、key ()を呼び出します。この関数は

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

ただし、key()を使用してレガシー・キーを取得できる点は異なる。

key()、nativeKey()、isAttached()も参照の こと。

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

この共有メモリー・オブジェクトの、プラットフォーム固有のネイティブ・キーkey を設定します。key が現在のネイティブ・キーと同じ場合、この関数は何もせずに戻ります。そうでない場合、共有メモリ・オブジェクトが基盤となる共有メモリ・セグメントにアタッチされていれば、新しいキーを設定する前に、そのセグメントからdetach を取得します。この関数は、attach ()を行いません。

この関数は、ネイティブ・キーが他のプロセスから共有された場合に便利です。詳細は「ネイティブIPCキー」を参照。

ポータブル・ネイティブ・キーは、platformSafeKey() を使用して取得できます。

nativeKey() を呼び出すと、ネイティブ・キーを取得できます。

この関数はQt 6.6で導入されました。

nativeKey()、nativeIpcKey()、isAttached()も参照してください

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

type 型の共有メモリオブジェクト(Qt 6.6 から type パラメータが利用できるようになりました)に対して、プラットフォーム固有のネイティブキーkey を設定します。key が現在のネイティブキーと同じ場合、関数は何もせずに戻ります。そうでない場合、共有メモリオブジェクトが基礎となる共有メモリセグメントにアタッチされていれば、新しいキーを設定する前に、detach 。この関数は、attach ()を行いません。

この関数は、ネイティブ・キーが他のプロセスから共有された場合に便利ですが、アプリケーションは、キー・タイプが他のプロセスが期待するものと一致するように注意する必要があります。詳細は「ネイティブIPCキー」を参照のこと。

ポータブル・ネイティブ・キーは、platformSafeKey()を使用して取得できる。

nativeKey() を呼び出すと、ネイティブ・キーを取得できる。

nativeKey()、nativeIpcKey()、isAttached()も参照のこと

qsizetype QSharedMemory::size() const

接続されている共有メモリー・セグメントのサイズを返す。共有メモリ・セグメントがアタッチされていない場合は、0 が返される。

注意: セグメントのサイズは、create() に渡された要求サイズよりも大きい可能性がある。

create() およびattach()も参照

bool QSharedMemory::unlock()

共有メモリ・セグメントのロックを解放し、そのロックが現在このプロセスによって保持されている場合はtrue を返す。セグメントがロックされていない場合、またはロックが他のプロセスによって保持されている場合は、何も起こらず false が返されます。

lock()も参照

© 2025 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.