Qt C++
を使用してアプリケーションを実装しています。ここでは、QSharedMemory
を使用してアプリケーションの複数のインスタンスを制限しています。次のようにmain.cpp
内の関連するコードセグメントは、アプリケーションを開くにはアプリケーションのクラッシュ時にQSharedMemoryが削除されない
QSharedMemory sharedMemory;
sharedMemory.setKey(SM_INSTANCE_KEY);
if (!sharedMemory.create(1))
{
QMessageBox::warning(0, "Console", "An instance of this application is already running!");
exit(0); /* Exit, already a process is running */
}
ですが、私は、共有メモリが自分のアプリケーション用に作成されていることがわかります。 (shmid
7045192、size
1B)
これまでのところは良いです。アプリケーションが何らかの理由でクラッシュすると問題が発生します。クラッシュすると、sharedMemoryがクリアされないので、もうアプリケーションを開くことができません。クラッシュすると、アタッチされたアプリケーションの数は0になりますが、共有メモリは削除されません。私の理解などを1として
を次のように関連するスクリーンショットは、共有メモリの状態が他の共有思い出のようなdest
としてマークされていないとして、いずれかが存在しない場合でも削除取得されていません添付されたプロセス。
私の質問は、共有メモリのステータスをdest
とマークする方法はありますか?
をこれは本当に良い解決策です。それは完璧に働いた。ありがとう。 –
良い解決策、ありがとうございます。 –
以下も可能です: 1- Init shm 2-アタッチ/デタッチ 3作成することができる場合はここをクリック このようにすれば、より読みやすくなり、x2の 'if'がなくなります。しかし、ありがとう、この修正は私の一日を節約! – user2629409