【发布时间】:2017-03-02 08:08:06
【问题描述】:
我正在使用Qt C++ 实现一个应用程序,我使用QSharedMemory 来限制应用程序的多个实例。 main.cpp中的相关代码段如下,
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 */
}
打开应用程序时,我可以看到已为我的应用程序创建了共享内存。 (shmid7045192,size1B)
到目前为止一切顺利。当我的应用程序由于某种原因崩溃时,就会出现问题。崩溃时,sharedMemory 没有被清除,所以我无法再打开应用程序。当它崩溃时,附加的应用程序计数变为 0,但共享内存不会被删除。相关截图如下
据我了解,由于共享内存的状态没有像其他共享内存一样标记为dest,因此即使没有任何附加进程,它也不会被删除。
那么,我的问题是,有没有办法将共享内存的状态标记为 dest ?
【问题讨论】:
标签: c++ qt shared-memory qsharedmemory