我想使用QSharedMemory在两个应用程序之间共享数据,使用它可以完美地共享一个数据段,但是当我尝试共享多个数据段时,我只能访问最后一个数据段
这是我的代码
第一个应用程序中的sharedMemroy.cpp
void SharedMemory::loadIntoSharedMem(QString memoryKey,QString &data)
{
sharedMem.setKey(memoryKey);
if (sharedMem.isAttached())
{
sharedMem.detach();
}
if( data.length())
{
// load into shared memory
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << data;
int size = buffer.size();
if (!sharedMem.create(size)) {
qDebug()<<"Unable to create shared memory segment."<<sharedMem.isAttached()<<" "<<sharedMem.error();
}
sharedMem.lock();
char *to = (char*)sharedMem.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(sharedMem.size(), size));
sharedMem.unlock();
}
else
{
qDebug()<< "no data to share"
}
}在main中
SharedMemory sh;
sh.loadIntoSharedMem("memo1",data1 );
sh.loadIntoSharedMem("memo2",data2 );
sh.loadIntoSharedMem("memo3",data3 );在第二个应用程序中的showSharedData.cpp上
QString ShowSharedMemory::loadFromSharedMem(QString memoryKey)
{
sharedMem.setKey(memoryKey);
if (!sharedMem.attach())
{
qDebug()<<"Unable to load!";
return"";
}
QBuffer buffer;
QDataStream in(&buffer);
QString text;
sharedMem.lock();
buffer.setData((char*)sharedMem.constData(), sharedMem.size());
buffer.open(QBuffer::ReadOnly);
in >> text;
sharedMem.unlock();
sharedMem.detach();
return text;
}在main中
data1=showMemory.loadFromSharedMem("memo1");
data2=showMemory.loadFromSharedMem("memo2");
data3=showMemory.loadFromSharedMem("memo3");谢谢你的帮忙
发布于 2014-01-21 22:54:28
您的问题是第二次写入尝试会覆盖所有数据。如果你想通过共享内存共享数据,你需要实现跨进程的容器(boost有一些),比如QList。这是一个很难的话题。
我建议您使用套接字在进程之间发送字符串。或其他依赖于平台的机制(例如,windows上的管道)。
https://stackoverflow.com/questions/21259658
复制相似问题