ich eine Anwendung Umsetzung Qt C++
mit denen ich verwendet habe QSharedMemory
mehrere Instanzen der Anwendung zu beschränken. Relevante Codesegment in main.cpp
ist wie folgt,QSharedMemory ist nicht auf den Absturz der Anwendung gelöscht bekommen
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 */
}
über die Anwendung zu öffnen, kann ich sehen, dass ein gemeinsam genutzter Speicher ist für meine Anwendung erstellt. (shmid
7.045.192, size
1B)
So weit so gut. Problem tritt auf, wenn meine Anwendung aus irgendeinem Grund abstürzt. Beim Absturz wird das sharedMemory nicht gelöscht, sodass ich die Anwendung nicht mehr öffnen kann. Wenn es abstürzt, wird die Anzahl der angehängten Anwendungen 0, aber der gemeinsam genutzte Speicher wird nicht gelöscht. Relevante screen-shot ist wie folgt
Gemäß wie mein Verständnis, wie der Status des gemeinsam genutzten Speichers wird als dest
wie andere gemeinsame Speicher nicht markiert ist, wird es nicht einmal gelöscht wird, wenn es keine ist angehängter Prozess.
Also, meine Frage ist, dass ist es eine Möglichkeit, Status des Shared Memory als dest
der Kennzeichnung?
Das ist wirklich gute Lösung. Es hat perfekt funktioniert. Vielen Dank. –
Gute Lösung, danke. –
Sie können auch: 1- Init shm 2- anhängen/trennen 3- Aktivieren Sie hier, wenn Sie erstellen können. Auf diese Weise ist es besser lesbar und du hast kein x2 'if'. Aber danke, diese Lösung hat meinen Tag gerettet !! – user2629409