QT共享内存读取数据失败

what237 2017-11-16 03:22:43
读取共享内存里的数据,buffer一直为空,使用别人的程序读取成功,说明共享内存创建是没有问题的。读取不成功的代码如下,请各位大神帮帮忙看看,问题在哪。快急死人了。
sharedMemory.setKey(QString("test"));
bool res = sharedMemory.attach();
if (res)
{
qDebug() << sharedMemory.errorString();

QBuffer buffer;
QDataStream in(&buffer);
QString text;
char ch;

sharedMemory.lock();
buffer.setData((const char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QIODevice::ReadOnly);
in >> text;

sharedMemory.unlock();

sharedMemory.detach();
}
...全文
1051 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_31713881 2018-12-07
  • 打赏
  • 举报
回复
你要确定创建的共享内存段是否还存在?因为如果没有进程引用共享内存段时,会自动释放(Widows)
xh286286 2017-11-17
  • 打赏
  • 举报
回复
引用 3 楼 what237 的回复:
[quote=引用 1 楼 xh286286的回复:]
sharedMemory.setKey(QString("test"));
bool res = sharedMemory.attach();
if (res)
{
               qDebug() << sharedMemory.errorString();

QBuffer buffer;
QDataStream in(&buffer);
QString text;
char ch;

sharedMemory.lock();
buffer.setData((const char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QIODevice::ReadOnly);
    qDebug()<< buffer.readAll();

sharedMemory.unlock();

sharedMemory.detach();
}
在attach的时候老是返回false,共享内存是另一个程序创建的[/quote]
引用 3 楼 what237 的回复:
[quote=引用 1 楼 xh286286的回复:]
sharedMemory.setKey(QString("test"));
bool res = sharedMemory.attach();
if (res)
{
               qDebug() << sharedMemory.errorString();

QBuffer buffer;
QDataStream in(&buffer);
QString text;
char ch;

sharedMemory.lock();
buffer.setData((const char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QIODevice::ReadOnly);
    qDebug()<< buffer.readAll();

sharedMemory.unlock();

sharedMemory.detach();
}
在attach的时候老是返回false,共享内存是另一个程序创建的[/quote] sharedMemory.attach(); bool res = sharedMemory.isAttached(); if (res) { ... }
what237 2017-11-17
  • 打赏
  • 举报
回复
引用 1 楼 xh286286的回复:
sharedMemory.setKey(QString("test"));
bool res = sharedMemory.attach();
if (res)
{
               qDebug() << sharedMemory.errorString();

QBuffer buffer;
QDataStream in(&buffer);
QString text;
char ch;

sharedMemory.lock();
buffer.setData((const char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QIODevice::ReadOnly);
    qDebug()<< buffer.readAll();

sharedMemory.unlock();

sharedMemory.detach();
}
在attach的时候老是返回false,共享内存是另一个程序创建的
what237 2017-11-16
  • 打赏
  • 举报
回复
引用 1 楼 xh286286的回复:
sharedMemory.setKey(QString("test"));
bool res = sharedMemory.attach();
if (res)
{
               qDebug() << sharedMemory.errorString();

QBuffer buffer;
QDataStream in(&buffer);
QString text;
char ch;

sharedMemory.lock();
buffer.setData((const char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QIODevice::ReadOnly);
    qDebug()<< buffer.readAll();

sharedMemory.unlock();

sharedMemory.detach();
}
是需要读的吗,明天试一下,先谢谢了。
xh286286 2017-11-16
  • 打赏
  • 举报
回复
sharedMemory.setKey(QString("test"));
bool res = sharedMemory.attach();
if (res)
{
               qDebug() << sharedMemory.errorString();

QBuffer buffer;
QDataStream in(&buffer);
QString text;
char ch;

sharedMemory.lock();
buffer.setData((const char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QIODevice::ReadOnly);
    qDebug()<< buffer.readAll();

sharedMemory.unlock();

sharedMemory.detach();
}

16,818

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧