gpt4 book ai didi

c++ - QT中如何在QShared内存中写入多个数据

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:16 24 4
gpt4 key购买 nike

我想将 4 - 5 个变量写入 QSharedMemory,但我不知道如何读取和写入它。

我有五个不同数据类型的变量 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++ - QT中如何在QShared内存中写入多个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20510855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com