Revision to QSharedMemory usage

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.
 
} 

你可能感兴趣的:(Revision to QSharedMemory usage)