QSharedMemory
是 Qt 提供的一个类,用于在多个进程之间共享内存。它可以让您在不同的进程间传递数据,而无需通过文件或网络来进行传输。下面是 QSharedMemory
的详细用法和相关知识点。
构造函数:
QSharedMemory(const QString &key, QObject *parent = nullptr);
创建一个 QSharedMemory
对象,并指定共享内存的关键字 key
。
创建共享内存:
bool create(int size, QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite);
创建指定大小的共享内存。size
表示内存大小,mode
表示访问模式,默认是读写模式。
附加到现有共享内存:
bool attach(QSharedMemory::AccessMode mode = QSharedMemory::ReadWrite);
附加到现有的共享内存段。mode
表示访问模式。
分离共享内存:
bool detach();
分离共享内存段,使得当前进程不再访问这块共享内存。
写入数据:
void *data();
获取共享内存的指针,通过这个指针可以直接操作共享内存。
检查是否已附加:
bool isAttached() const;
检查当前对象是否已附加到共享内存段。
获取错误信息:
QString errorString() const;
获取最近一次操作的错误信息。
下面是一个简单的示例,演示如何使用 QSharedMemory
在两个进程之间共享数据。
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSharedMemory sharedMemory("SharedMemoryExample");
if (!sharedMemory.create(1024)) {
qDebug() << "Unable to create shared memory:" << sharedMemory.errorString();
return -1;
}
// 写入数据到共享内存
QByteArray data;
QBuffer buffer(&data);
buffer.open(QBuffer::WriteOnly);
QDataStream out(&buffer);
out << QString("Hello from process A");
buffer.close();
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = data.data();
memcpy(to, from, qMin(sharedMemory.size(), data.size()));
sharedMemory.unlock();
qDebug() << "Process A wrote data to shared memory.";
return a.exec();
}
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSharedMemory sharedMemory("SharedMemoryExample");
if (!sharedMemory.attach()) {
qDebug() << "Unable to attach to shared memory:" << sharedMemory.errorString();
return -1;
}
sharedMemory.lock();
QBuffer buffer;
QDataStream in(&buffer);
QByteArray data((char*)sharedMemory.constData(), sharedMemory.size());
buffer.setData(data);
buffer.open(QBuffer::ReadOnly);
QString message;
in >> message;
sharedMemory.unlock();
qDebug() << "Process B read data from shared memory:" << message;
return a.exec();
}
lock()
和 unlock()
方法来实现简单的同步。QSharedMemory
时,随时检查返回值并处理可能的错误,可以通过 errorString()
获取详细的错误信息。QSharedMemory
是一个高效的进程间通信方式,通过共享内存,多个进程可以共享数据,提高通信效率。在使用时需要注意同步问题和错误处理。通过上述示例,您可以快速掌握 QSharedMemory
的基本用法,并在实际开发中灵活应用。
其他QT文章
1. QT开发环境安装以配置。
2. QT线段画板实战
3. 半小时玩转QT桌面系统托盘(含托盘消息)
4. QT入门开发一个时钟
5. 半小时教你做大转盘游戏(QT篇)
6. 手把手教你制作【带吸附效果的线段绘制】(QT)
7. 手把手教你开发-滚动效果号码抽奖(QT)
8. 100行代码实现贪吃蛇小游戏
9.C++实现《扫雷》游戏(入门经典)
10. svg转图片工具开发
11. Qt网路与通信(获取本机网络信息)
12. Qt网路与通信(UDP客户与服务)
13. Qt网络与通信(TCP聊天室)
14. Qt多线程以及线程池
15. Qt散点图、折线图、柱状图、盒须图、饼状图、雷达图开发实例
16. 取色器(QT)
17. MQTT客户端入门开发
18.QT文件上传带进度条实例(含源码)
19. Qt音乐播放器开发实例(可毕设含源码)