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(...)函数中添加限制实例个数的功能的,而不是在主窗口的文件中修改。