QT中函数相互调用造成内存泄漏,解决方案

QT中函数相互调用造成内存泄漏

解决方案

  1. 通过在同一个类中添加信号槽,无法解决问题,qt似乎对同一个类槽函数直接用的本地函数代替,未使用信号槽机制。
  2. 在Appinit中使用Lamda表达式调用,失败,emit 发送信号可视为直接调用函数
  3. 采用定时器循环监测,避免互相调用(妥协了)
  4. 通过进一步测试,在connect中第五个参数设置为Qt::QueuedConnection可以避免该问题,并且两个函数运行依然在同一个线程中,详情见链接

问题实例:
//形成B->C->A->B的无限循环
connect(this,A,this,B);
void B(){

C();
}

void C(){

emit A();
return;
}

Qt ,可以使用 QSharedMemory 类实现共享内存,进程间通信的过程包括以下步骤: 1. 创建共享内存区域:在某个进程创建一个 QSharedMemory 对象,调用 create() 函数创建共享内存区域,指定共享内存的大小和其他属性。 2. 连接共享内存区域:在其他进程也创建一个 QSharedMemory 对象,调用 attach() 函数连接到已经创建的共享内存区域,获取共享内存的地址。多个进程可以通过同一个 key 值连接到同一块共享内存区域。 3. 在共享内存进行数据交换:多个进程都可以访问共享内存区域的数据,可以使用锁机制等方式来确保数据的同步和正确性。在 Qt ,可以使用 QMutex 等类来实现锁机制。 4. 调用函数:在共享内存存储的数据通常是一些结构体、类或对象等,可以在一个进程修改这些数据,然后在另一个进程调用相应的函数来处理这些数据。在 Qt ,可以使用 QBuffer、QDataStream 等类来实现数据的序列化和反序列化,以便在进程间传递数据。 5. 断开共享内存连接:当不再需要访问共享内存区域时,需要调用 detach() 函数断开与共享内存的连接。 6. 删除共享内存区域:当所有进程都不再使用共享内存区域时,需要调用 QSharedMemory 的 static remove() 函数删除共享内存区域,释放资源。 需要注意的是,在使用共享内存进行进程间通信时,需要考虑数据同步和互斥等问题,以避免数据竞争和死锁等情况。同时,由于共享内存是操作系统资源,应该在使用完毕后及时释放,避免内存泄漏和资源浪费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值