Qt读写共享内存的简单实现

只要QSharedMemory实现

实现如下

    RwSharedMemory::initialize().setSharedMemoryData("keys","nihao测试");

    QString data = RwSharedMemory::initialize().getSharedMemoryData("keys");

类的实现如下

#include <QSharedMemory>
#include <QBuffer>
#include <QByteArray>
//读写取共享内存
class RwSharedMemory 
{
public:
	
	static RwSharedMemory initialize()
	{
		static RwSharedMemory _initialize;
		return _initialize;
	}
	
	QByteArray getSharedMemoryData(const  QString &key)
	{
		QSharedMemory shareMemory(key);
		//shareMemory.setKey(key);
		if(!shareMemory.attach())
		{
			m_error = QString("attach error  key %1 error  %2 ").arg(shareMemory.error()).arg(shareMemory.errorString());
			return "";
		}

		
		shareMemory.lock();
		QByteArray byb;
		byb.append((char*)shareMemory.constData());
		//QBuffer buffer;
		//buffer.setData((char*)shareMemory.constData(), shareMemory.size());
		//buffer.open(QBuffer::ReadOnly);
		QString data;// = buffer.readAll();
		shareMemory.unlock();
		shareMemory.detach();

		m_error = "ok";

		return byb;
	}
	
	bool setSharedMemoryData(const QString &key,const QString &data)
	{
		QSharedMemory *shareMemory = new QSharedMemory;
		shareMemory->setKey(key);
		if(shareMemory->isAttached())  
		{  
			shareMemory->detach();//将该进程与共享内存段分离  
		}
		
		QByteArray byb;
		byb.append(data);
		const char * from = byb.data();

		int size_ = byb.length();
		if (!shareMemory->create(size_))
		{
			m_error = QString("create key %1 error  %2  %3 ").arg(shareMemory->error()).arg(shareMemory->errorString());
			return false;
		}
		shareMemory->lock();  
		char * to = static_cast<char*>(shareMemory->data());
		memcpy(to, from, size_);
		shareMemory->unlock();//共享内层解锁  

		m_error = "ok";
		return true;

	}

	QString error() {return m_error;}


public:
	RwSharedMemory(){}
	~RwSharedMemory(){}

private:
	QString m_key;
	QString m_error;
};

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值