只运行一个exe
在 Qt 框架中,QSharedMemory 类用于在多个进程之间共享内存。这通常用于同步操作或实现进程间通信(IPC)。当创建一个 QSharedMemory 对象并指定一个键(在这个例子中是 "onlyOne")时,正在尝试访问或创建一个与该键相关联的共享内存段。
cpp
#include <qsharedmemory.h>
// 只运行一个exe
QSharedMemory shared("onlyOne");
// 尝试连接到已存在的共享内存
if (shared.attach())
{
// 已经存在一个运行的实例
return 0;
}
shared.create(1);
创建共享内存
cpp
QSharedMemory shared("onlyOne");
if (!shared.create(1024)) { // 假设我们想要1024字节的共享内存
qDebug() << "Unable to create shared memory segment.";
return;
}
连接到已存在的共享内存
cpp
QSharedMemory shared("onlyOne");
if (!shared.attach()) { // 尝试连接到已存在的共享内存
qDebug() << "Unable to attach to shared memory segment.";
return;
}
读写共享内存
使用 lock() 和 unlock() 方法来确保在读写共享内存时没有其他进程同时进行这些操作。使用 data() 方法获取一个指向共享内存数据的指针。
cpp
if (shared.lock()) {
char *to = static_cast<char*>(shared.data());
const char message[] = "Hello, world!";
std::copy(message, message + sizeof(message) - 1, to); // 注意不要越界
shared.unlock();
}
删除共享内存
当不再需要共享内存段时,可以使用 detach() 方法断开连接(如果之前已经连接了),并使用 remove() 方法删除它。
cpp
shared.detach(); // 如果之前连接了
shared.remove(); // 删除共享内存段