2013-12-11 26 views
2

我想将4 - 5个变量写入QSharedMemory,但我不知道要读取和写入该数据。如何在QT中的QShared内存中写入多个数据

我有五个变量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中通过所有变量,但我收到错误。

回答

0

我通过在第一个程序中连接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(); 
+0

仍然不是一个通用的解决方案。或者正在转换为QString的最佳解决方案? –

相关问题