Qt Creatorでプロジェクトを実行するたびに、アプリの別のインスタンスがスピンアップします。私は手動でアプリケーションを終了する必要があり、そうでなければ私のドックはかなり高速になります。何が痛い。これを回避する方法はありますか?私がもう一度アプリケーションを実行すると、すでに実行中のバージョンを終了することができたらもっと意味があるでしょう。これはできますか?Qt Creator:もう一度実行する前にアプリの前のインスタンスを終了しますか?
答えて
shared memoryを使用すると、問題を解決できます。私はすでに実行中のインスタンスがある間、私のプログラムの別のインスタンスを起動しないために、このアプローチを使用しています。実際には、これを実装していわゆるシングルインスタンスアプリケーションを実現しています。
あなたのケースは私とは少し異なりますが、何とか2番目のアプリケーションから最初のアプリケーションに信号を送信して閉じる必要があります。私はあなたがまだQSharedMemory
を使用してこの動作を達成できると思います。
単一インスタンスのアプリケーションを実現するために何をしたかは、普遍的な一意のID(UUID)をキーとして共有メモリを作成し、私のプログラムがロックをかけ始めるたびにプログラムがロックされているすでに実行中のインスタンスが存在し、自動的に終了することを理解しています。
要件を満たすには、この実装を改善する必要があります。理論的には、関数ポインタ(またはqtシグナル)を共有メモリに置き、別のインスタンスが起動すると、(2番目の)インスタンスが起動して最初のインスタンスを終了させるようにします。
IN MAIN
check if shared memory in use
if yes
fire the exit function via shared memory to close 1st app
if no
put the function pointer which will close the app when another instance come up
do stuff
をあなたにわずかなヒントを与えるために、私のコード:残念ながら流れを、私はこれを実装する方法を知りませんが、私は、これはあなたの意見を与えるだろう願っています...
次の多少のようにする必要があります
QSharedMemory shared(AppConstants::UUID); //Global variable
int main(){
// Ensure single instanse of App
if(!shared.create(512, QSharedMemory::ReadWrite))
{
// QMessageBox msgBox;
QMessageBox::critical(0, QObject::tr("App is already running!"), QObject::tr("App is already running!"), QMessageBox::Ok, QMessageBox::Ok);
qCritical() << "Cevirgec is already running!";
exit(0);
}
else {
qDebug() << "App staring...";
}
}
幸運をたどり、ここにあなたのソリューションを共有することを忘れないでくださいように単一のインスタンス用です。)
EDIT:
関数ポインタやQtシグナルを入れてから起動できない場合(私は願っていません)、共有メモリに変数を置くと、実行中のインスタンスの数やアプリケーション内で定期的に(スレッド)チェックし、1より大きい場合はアプリケーションを閉じます。
ここに競合状態に気をつけろ!各インスタンスによって生成された乱数のペアと開始時刻を入れて競合状態を回避することができます。閉じる前に、あなたのアプリはそれが高齢者であることを保証します。例:QPair<int, QDateTime>
- 1. QT Creatorはプログラム実行中にコード0で終了します
- 2. スレッドは終了後にもう一度実行されます
- 3. Jqueryをクリックアニメーションが終了する前にもう一度クリックした場合
- 4. 終了前にアニメーション完了ブロックを実行しますか?
- 5. SSISパッケージの実行が終了する前に終了します
- 6. もう一度戻るボタンをクリックするとアプリを終了します - Android
- 7. 子スレッドが実行を完了する前にメインスレッドが終了しますか?
- 8. JNI - ネイティブスレッドの実行が終了する前にJavaが終了する
- 9. node/js関数をもう一度実行する前に停止する
- 10. 再生を終了する前にもう一度クリックしてオーディオファイルを再生する
- 11. 前の呼び出しが完了する前にboost ASIO async_receive()をもう一度呼び出す
- 12. 前のコードが終了する前に実行されるJava関数
- 13. クラス終了前の改行
- 14. 私はアプリケーションの終了前に廃棄を実行しますか?
- 15. 一度にアプリ全体を終了
- 16. EOFのために終了する前に何度もfgetsがループする
- 17. Qt Creator - UIクラスのカスタム名前空間
- 18. プロセスが終了する前にCGIプリントが終了します
- 19. WebFormsのAsync/Await - ページのライフサイクルが終了する前に継続をどのように実行しますか?
- 20. プログラムの実行が終了する前にQSerialPort.closeが完了していることを確認しますか?
- 21. もう1つを開始する前に終了操作
- 22. Spark Streamingでマイクロバッチが終了する前にアクションを実行
- 23. リクエストがRestKitで終了する前後に関数を実行
- 24. 前のメソッドが終了した後にメソッドを実行します
- 25. Qt Creatorでエラーを実行する
- 26. ロジックが実行される前にプログラムが終了する
- 27. SwingWorkerが終了するのを待ってからもう一度実行してください
- 28. フォークが完了する前にDockerが終了しますか?
- 29. WPF - タスクが次の実行前に終了するまで待ちます
- 30. 待機中の関数が実行を再試行する前に実行を終了しました。
[ビルドまたは実行前に実行中のアプリケーションを強制終了できるQt Creatorを構成できますか?](http://stackoverflow.com/questions/14964093/can-you-configure-qt-creator-to実行前の実行アプリケーション - または - ) – bpierre