QT 进程间通信,使用共享内存写入读取数据

目录

一、进程间通信的方式:

1、TCP/IP

2、共享内存

3、D-Bus

4、QProcess

5、管道

二、QSharedMemory 的使用


一、进程间通信的方式:

1、TCP/IP

如:QNetworkAccessManager、QTcpSocket、QTcpServer、QSslSocket

2、共享内存

QSharedMemory 跨平台的共享内存类

3、D-Bus

Qt D-Bus 模块是一个 Unix 库,可以使用 D-Bus 协议来实现进程间通信。

它将 QT 的信号与槽机制扩展到了 IPC 层面,允许从一个进程发射的信号关联到另一个进程的槽上。

4、QProcess

详情可查看我写的上一篇文章:

https://blog.csdn.net/LearnLHC/article/details/115326039

5、管道

QLocalSocket 提供一个本地套接字,是一个有名管道。

二、QSharedMemory 的使用

1、指定 key 系统用它作为底层共享内存段的标识

QSharedMemory sharedMemory;

// 指定 key 系统用它作为底层共享内存段的标识
sharedMemory.setKey("QSharedMemoryExample");

2、判断该进程是否已经连接到共享内存段,如果已连接,调用 detach 进行分离

// 判断该进程是否已经连接到共享内存段,如果已连接,调用 detach 进行分离
if (sharedMemory.isAttached())
        sharedMemory.detach();

3、创建指定大小的共享内存段

int size = 1024;
// 创建指定大小的共享内存段
if (!sharedMemory.create(size)) {
    ui->label->setText(tr("无法创建共享内存段!"));
   return;
}

4、向共享内存放入信息

// 需要写入共享内存的数据
QBuffer buffer;

// 向共享内存放入信息;
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(sharedMemory.size(), size));
sharedMemory.unlock();

5、从共享内存中获取信息,存入 buffer 中

// 从共享内存中获取信息,存入 buffer 中
QBuffer buffer;
QDataStream in(&buffer);

sharedMemory.lock();
buffer.setData((char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
sharedMemory.unlock();

sharedMemory.detach();

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt共享内存是一种实现进程间通信的机制。进程间通信通常用于在不同的进程之间交换数据共享内存就是将一块内存空间映射到多个进程的地址空间中,使得多个进程可以直接访问这块内存空间。Qt提供了QSharedMemory类来实现共享内存使用Qt共享内存进行进程间通信的步骤如下: 1. 创建一个QSharedMemory对象,并指定共享内存的唯一标识符。 2. 调用create()函数来创建共享内存,如果共享内存已经存在,则直接打开。 3. 调用attach()函数将共享内存映射到当前进程的地址空间中。 4. 使用writeData()函数向共享内存写入数据。 5. 使用readData()函数从共享内存读取数据。 6. 使用detach()函数将共享内存从当前进程的地址空间中解除映射。 7. 使用destroy()函数销毁共享内存。 通过这种方式,多个进程可以通过共享内存来交换数据,而无需通过消息传递等方式进行繁琐的数据传输。这样可以提高进程间通信的效率,减少系统资源的占用。 需要注意的是,共享内存使用需要保证互斥性,避免多个进程同时对共享内存进行写操作导致数据混乱。可以使用QMutex等同步机制来解决这个问题。 总之,Qt共享内存提供了一种高效的进程间通信方式,使得多个进程可以方便地进行数据交换。可以广泛应用于需要实现进程间数据共享的场景,如多进程协同处理、进程间数据传递等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值