Ich bin neu in der QT. Ich habe das grundlegende Beispiel von QT für Shared Memory gesehen, aber ich möchte Struktur mit Shared Memory teilen. Wie kann ich es erreichen?Pass Struktur mit QSharedMemory
void Dialog::Send()
{
if (sharedMemory.isAttached())
detach();
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << structa->a;
out << structa->b;
out << structa->c;
int size = buffer.size();
if (!sharedMemory.create(size))
{
ui.label->setText(tr("Unable to create shared memory segment."));
return;
}
sharedMemory.lock();
char *to = (char*)sharedMemory.data();
const char *from = buffer.data().data();
memcpy(to, from, qMin(sharedMemory.size(), buffersize));
sharedMemory.unlock();
}
In Empfangsfunktion ich die Daten direkt im Buffer bekommen, aber ich bin nicht in der Lage, es zu konvertieren veriable zurück zu Struct.
void Dialog::Receive()
{
if (!(sharedMemory.attach()))
{
ui.label->setText(tr("Unable to attach to shared memory segment.\n" \
"Load an image first."));
return;
}
QByteArray byteArray;
QBuffer buffer(&byteArray);
QDataStream in(&buffer);
TestStruct tmp; //Re-make the struct
sharedMemory.lock();
buffer.setData((char*)sharedMemory.constData(), sizeof(tmp));
buffer.open(QBuffer::ReadOnly);
int nSize = ((buffer.size()));
memcpy(&tmp, buffer.data().data(), nSize);
qDebug()<< " tmp.a = "<<tmp.a;
qDebug()<< " tmp.b = "<<tmp.b;
qDebug()<< " tmp.c = "<< tmp.c;
sharedMemory.unlock();
sharedMemory.detach();
}
Können Sie zumindest einige Code zur Verfügung stellen, damit wir sehen können, was Sie bereits versucht haben. –
Hallo, ich habe meinen Code gepostet. Ich schreibe sowohl Sender- als auch Empfänger-Pufferdaten in Datei und beide sind gleich, aber auf der Empfängerseite kann ich es nicht zu Strukturvariablen typen dereferenzieren. –