如何在QT中的QShared内存中写入多个数据
how to write more than one data in QShared memory in QT
我想向QSharedMemory写入4-5个变量,但我不知道该读该写。
我有五个不同数据类型的变量A、B、C、D、E。在下面的程序中,我将变量A写入共享内存。如何将其他变量也写入相同的?
此程序写入共享内存。
if(sharedMem.isAttached())
{
sharedMem.detach();
qDebug() <<"Here shared";
}
QString text = QString::number(A); // A is Passed
QBuffer buffer;
buffer.open( QBuffer::ReadWrite );
QDataStream out( &buffer );
out << text;
int size1 = buffer.size();
if ( !sharedMem.create( size1 ) )
{
qDebug() << "Unable to create shared memory segment.";
return;
}
// Write into the shared memory
sharedMem.lock();
char *to = (char*)sharedMem.data();
const char *from = buffer.data().data();
memcpy( to, from, qMin( sharedMem.size(), size1 ) );
sharedMem.unlock();
如果我正在传递所有5个变量,如何使用下面的程序检索这些变量。
这个程序从共享内存中读取。
if (!sharedMem.attach())
{
ui->label->setText(tr("Unable to load!"));
return;
}
QBuffer buffer;
QDataStream in(&buffer);
QString text;
sharedMem.lock();
char* pointer = (char*)sharedMem.constData();
buffer.setData((char*)sharedMem.constData(), sharedMem.size());
buffer.open(QBuffer::ReadOnly);
in >> text; // Reading A
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();
编辑:
我尝试使用QStringlist来传递所有变量,但我得到了错误。
我通过在第一个程序中连接QString并在第二个程序中使用QStringlist Split函数来解决问题。
此程序写入共享内存。
if(sharedMem.isAttached())
{
sharedMem.detach();
qDebug() <<"Here shared";
}
// I changed here . now A & B is Passed .
QString text = QString::number(A)+ "," + QString::number(B) ;
QBuffer buffer;
buffer.open( QBuffer::ReadWrite );
QDataStream out( &buffer );
out << text;
int size1 = buffer.size();
if ( !sharedMem.create( size1 ) )
{
qDebug() << "Unable to create shared memory segment.";
return;
}
// Write into the shared memory
sharedMem.lock();
char *to = (char*)sharedMem.data();
const char *from = buffer.data().data();
memcpy( to, from, qMin( sharedMem.size(), size1 ) );
sharedMem.unlock();
这个程序从共享内存中读取。
if (!sharedMem.attach())
{
ui->label->setText(tr("Unable to load!"));
return;
}
QByteArray read1; // used ByteArray Change 1
QBuffer buffer;
QDataStream in(&buffer);
QString text = QString(read); // Change 2
QStringList strlist = text.split(","); // Change 3
int A = strlist.at(0).toInt(0);
int B = strlist.at(1).toInt(0);
sharedMem.lock();
char* pointer = (char*)sharedMem.constData();
buffer.setData((char*)sharedMem.constData(), sharedMem.size());
buffer.open(QBuffer::ReadOnly);
in >> text; // Reading A
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();
相关文章:
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 如何在 malloc 内存中初始化非 POD 数据
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 存储在哪个内存段(代码/数据段)类(员工)中?
- 基于浅树的数据结构的内存分配器,用于频繁分配和解除分配
- 获取 R 数据帧的内存地址
- 将数据存储在内存中以供以后访问
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 数据在内存 c++ 中丢失
- 我可以使用哪种数据结构来释放连续内存中的内存?
- 使用 delete [] 运算符取消分配类中数据成员的内存
- 为什么 std::set 容器使用的内存比其数据大小多得多?
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 内存映射C++中的流数据
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- C++应用程序中的静态数据内存限制
- 基于两个程序之间的事件触发器访问数据(内存)
- C++并集表示数据内存与C标量变量类型