• 5795阅读
  • 2回复

[讨论]【求助】 [复制链接]

上一主题 下一主题
离线amao502
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-13
我在写一个共享内存,把数据写进去,再读出来,可是没有成功。不知道怎么样设置KEY,代码在下面,请帮忙看一下。谢谢。。

#include "widget.h"
#include "ui_widget.h"
#include <QBuffer>
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
   sharedmem("mysharedmemorykey")
    {
      ...       //这里应用写什么?
    }
}
Widget::~Widget()
{
    delete ui;
}

void Widget::on_write_clicked()
{
    if(sharedmem.isAttached())
    {
        sharedmem.detach();
    }
    QString text;
    text="123456";
    QBuffer buffer1;
    buffer1.open( QBuffer::ReadWrite );
    QDataStream out( &buffer1 );
    out << text;
    int size = buffer1.size();
    if (!sharedmem.create( size ) )
    {
        ui->loadtext->append(tr("Unable to create shared memory segment."));
        return;
    }
    sharedmem.lock();
    char *to = (char*)sharedmem.data();
    const char *from = buffer1.data();
    memcpy( to, from, qMin( sharedmem.size(), size ) );
    sharedmem.unlock();
}
void Widget::on_read_clicked()
{
    if (!sharedmem.attach())
    {
        //If an attempt of reading from the shared memory before data is written
        ui->showtext->append(tr("Enter a text first"));
        return;
    }
    QBuffer buffer2;
    QDataStream in(&buffer2);
    QString text2;
    sharedmem.lock();
    buffer2.setData((char*)sharedmem.constData(), sharedmem.size());
    buffer2.open(QBuffer::ReadOnly);
    in >> text2;
    ui->showtext->append(text2);
    sharedmem.unlock();
    // As this is the last process attached to the shared memory segment
    // the shared memory segment is released, destroying its contents
    sharedmem.detach();
}
离线amao502
只看该作者 1楼 发表于: 2011-04-14
没有人回答?
离线dbzhang800

只看该作者 2楼 发表于: 2011-04-14
引用第1楼amao502于2011-04-14 09:50发表的  :
没有人回答?

建议先补充一下C++的基础吧
快速回复
限100 字节
 
上一个 下一个