只要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;
};