Revision to QSharedMemory usage

来源:互联网 发布:达索 软件 编辑:程序博客网 时间:2024/06/04 22:00

The old blog: http://blog.csdn.net/wangyeqiang/article/details/8296930       (Not mine)

My revision:

Creator:

Widget::Widget(){    if(!shareMemory.create(size))  //After created, it will automatically attached    {          qDebug()<<tr("can't create memory segment");          qDebug()<<shareMemory.error();       }} 


void Widget::on_pushButton_clicked()  {      QString filename = QFileDialog::getOpenFileName(this);      QPixmap pixMap;      pixMap.load(filename);      ui->label->setPixmap(pixMap);        QBuffer buffer;      QDataStream out(&buffer);      buffer.open(QBuffer::ReadWrite);      out<<pixMap;      qDebug()<<buffer.size();      int size = buffer.size();      shareMemory.attach();    qDebug()<<shareMemory.size();      shareMemory.lock();      char *to = (char*)shareMemory.data();      const char *from = (char*)buffer.data().data();      memcpy(to,from,qMin(size,shareMemory.size()));//数据从该进程中拷贝到共享数据内存中      shareMemory.unlock();//共享内层解锁  }  

Widget::~Widget(){   shareMemory.detach(); //detach from this process. } 

Data Fetcher

DataFetcherWidget::DataFetcherWidget(){    if(!shareMemory.create(size))  //still you can create it. After created, it will automatically attached    {          qDebug()<<tr("can't create memory segment");          qDebug()<<shareMemory.error();  <pre name="code" class="cpp"><pre name="code" class="cpp">    if(!shareMemory.attach())//将shareMemory与该进程绑定使之可以访问shareMemory里的内容      {          qDebug()<<tr("can't attach share memory");      }  


}
 }

void DataFetcherWidget::on_pushButton_clicked()  {      if(!shareMemory.attach())//将shareMemory与该进程绑定使之可以访问shareMemory里的内容      {          qDebug()<<tr("can't attach share memory");      }      QBuffer buffer;      QDataStream in(&buffer);      QPixmap pixMap;      shareMemory.lock();//给shareMemory枷锁      qDebug()<<shareMemory.size();      buffer.setData((char*)shareMemory.constData(),shareMemory.size());//将shareMemeory里的数据放到buffer里      buffer.open(QBuffer::ReadWrite);      in>>pixMap;      shareMemory.unlock();//将shareMemory解锁       ui->label->setPixmap(pixMap);  }  



DataFetcherWidget::~DataFetcherWidget(){   shareMemory.detach(); //detach from this process. } 

0 0
原创粉丝点击