ページの作成:「== 概要 == ソフトウェアのインスタンスを1つだけ実行(多重起動を禁止)する理由として、<br> メモリリークの問題を制限する、…」 |
|||
| 137行目: | 137行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
== QLocalServer / QLocalSocketの使用 == | |||
処理の流れを以下に示す。<br> | |||
# <code>QSharedMemory</code>を使用して、アプリケーションの単一インスタンスを保証する。 | |||
# <code>QLocalServer</code>と<code>QLocalSocket</code>を使用して、既存のインスタンスと新しいインスタンス間で通信を行う。 | |||
# SingleInstanceクラスのインスタンスを生成して、単一インスタンス制御のロジックをカプセル化する。 | |||
# SingleInstanceクラスのtryToRunメソッド実行して、アプリケーションが実行可能かどうかを確認する。 | |||
# 既存のインスタンスが検出された場合、sendMessagスロットを使用してそのインスタンスにメッセージを送信する。<br><u>ロック向け一時ファイルが、/tmp/MyAppServerファイルが自動的に生成される。</u> | |||
# 既存のインスタンスは、messageReceivedシグナルを通じてメッセージを受信して、適切に対応する。<br>(例: ウインドウのアクティブ化等) | |||
<br> | |||
これにより、アプリケーションの多重起動を効果的に防ぎつつ、既存のインスタンスとの通信も可能となる。<br> | |||
既存のインスタンスと通信する機能により、より柔軟で拡張性の高い設計になっている。<br> | |||
<br> | |||
必要に応じて、messageReceivedシグナルのハンドラを拡張して、既存のウインドウをアクティブにする等の処理を追加する。<br> | |||
<code>QLocalServer</code>と<code>QLocalSocket</code>を使用するには、Qt Networkモジュールが必要となる。<br> | |||
* Qtプロジェクトファイル (.pro) を使用する場合 | |||
<syntaxhighlight lang="make"> | |||
QT += network | |||
</syntaxhighlight> | |||
<br> | |||
* CMakeLists.txtファイルを使用する場合 | |||
<syntaxhighlight lang="cmake"> | |||
find_package(Qt6 REQUIRED COMPONENTS Network) | |||
target_link_libraries(SingleInstanceApp PRIVATE | |||
Qt6::Network | |||
) | |||
</syntaxhighlight> | |||
<br> | |||
<br><br> | |||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] | ||