QSharedMemory的使用例子

QSharedMemory是Qt提供的一个共享内存的类。它可以用来进程之间传递数据。本文以使用该类为例,实现一个限制同一程序启动实例个数的功能。后面将会给出代码,代码是限制程序只能启动一个实例,当然也可以很方便的改成只允许启动两个实例等等。本文所附代码在VS2017和Qt5.9上测试通过。下面是在已运行一个实例的情况下又启动一个实例的截图:

代码如下:

#include "qsharedmemory.h"
#include "qmessagebox.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    bool shallExit = false;
    QSharedMemory memory(u8"this-is-a-test");
    if (!memory.attach(QSharedMemory::ReadWrite))
    {
        memory.create(4);
        memory.lock();
        *(int*)memory.data() = 1;
        memory.unlock();
    }
    else
    {
        memory.lock();
        int* data = (int*)memory.data();
        if (*data >= 1)
        {
            QMessageBox::information(0, u8"提示", u8"已有1个实例在运行,即将退出程序。");
            shallExit = true;
        }
        else
        {
            *data += 1;
        }
        memory.unlock();
        memory.detach();
    }
    if (!shallExit)
    {
        QtTest w;
        w.show();
        return a.exec();
    }
    return 0;
}

上方代码中QtTest是主窗口类。此段代码功能是在程序启动时检测共享内存存不存在,如果不存在则新建一个共享内存,如果存在则读取它的内容查看当前有多少个实例正在运行,若达到所设限制则弹窗提示然后退出程序,否则显示主窗口。

注意上面的代码是在main(...)函数中添加限制实例个数的功能的,而不是在主窗口的文件中修改。

posted @ 2024-02-29 10:20  兜尼完  阅读(181)  评论(0编辑  收藏  举报