說明
setkey:設置密鑰,密鑰是Qt應用程序用來標識共享內存段的標識符。
create:創建共享內存空間
lock/unlock:加鎖解鎖
attach:將進程與共享內存綁定
isAttached:判斷是否綁定
detach:解除綁定
代碼
#include "widget.h"
#include "ui_widget.h"
#include <QBuffer>
#include <QTextStream>
#include <QtDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
m_sharedMemory.setKey("mykey");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_write_clicked()
{
if (m_sharedMemory.isAttached())
{
if(!m_sharedMemory.detach())
{
ui->label_tips->setText("Unable to detach from shared memory.");
return;
}
}
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << ui->lineEdit_write->text();
int size = buffer.size();
if(!m_sharedMemory.create(size))
{
ui->label_tips->setText("Unable to create shared memory segment." + m_sharedMemory.errorString());
return;
}
m_sharedMemory.lock();
char *to = (char*)m_sharedMemory.data();
const char *from = buffer.data().data();
memcpy(to,from,qMin(m_sharedMemory.size(),size));
m_sharedMemory.unlock();
}
void Widget::on_pushButton_read_clicked()
{
if(!m_sharedMemory.isAttached())
{
if(!m_sharedMemory.attach())
{
ui->label_tips->setText("Unable to attach to shared memory segment.");
return;
}
}
QBuffer buffer;
QDataStream in(&buffer);
QString str;
m_sharedMemory.lock();
buffer.setData((char*)m_sharedMemory.constData(),m_sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
in >> str;
m_sharedMemory.unlock();
m_sharedMemory.detach();
ui->lineEdit_read->setText(str);
}
源碼下載:https://download.csdn.net/download/sinat_33859977/12367396.