标签: qsharedmemory

Qt:单实例应用程序保护的最佳实践

QSingleApplicationQMutexQSharedMemory?我正在寻找能在Windows,OSX和Linux(Ubuntu)中顺利运行的东西.使用Qt 4.7.1

c++ qt qmutex qsharedmemory

39
推荐指数
3
解决办法
2万
查看次数

在Application崩溃时,QSharedMemory没有被删除

我正在使用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 */
}
Run Code Online (Sandbox Code Playgroud)

在打开应用程序时,我可以看到已为我的应用程序创建了共享内存.(shmid7045192,1B size)

在此输入图像描述

到现在为止还挺好.当我的应用程序由于某种原因崩溃时出现问题.在崩溃时,sharedMemory没有被清除,因此我无法再打开该应用程序.当它崩溃时,附加的应用程序计数变为0,但共享内存不会被删除.相关的屏幕截图如下

在此输入图像描述

根据我的理解,由于共享内存的状态没有dest像其他共享内存那样标记,即使没有任何附加进程也不会被删除.

所以,我的问题是,有没有办法将共享内存的状态标记为dest

c++ qt shared-memory qsharedmemory

2
推荐指数
1
解决办法
1100
查看次数

标签 统计

c++ ×2

qsharedmemory ×2

qt ×2

qmutex ×1

shared-memory ×1