我正在使用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,但共享內存不會被刪除。相關截屏如下所示
按我的理解,作爲共享存儲器的狀態沒有被標記爲dest
像其他共同的記憶,它是在沒有任何沒有得到,甚至刪除附加過程。
所以,我的問題是,是否有任何方式標記共享內存的狀態爲dest
?
這確實是很好的解決方案。它工作完美。謝謝。 –
好的解決方法,謝謝。 –
您還可以: 1- Init shm 2- attach/detach 3-如果您可以創建 ,請點擊此處。這樣它更具可讀性,而且你沒有x2'if'。但是,謝謝,這個修復節省了我的一天! – user2629409