2013-12-11 40 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的最佳解決方案? –

相關問題