Я новичок в QT. Я видел основной пример, предоставленный QT для общей памяти, но я хочу разделить структуру с использованием общей памяти. Как я могу это достичь?Структура прохода с использованием 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();
}
В Функция приема я получаю право данных в буфере, но я не могу преобразовать его в STRUCT veriable обратно.
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();
}
Можете ли вы по крайней мере обеспечить некоторый код, так что мы можем видеть, что вы пробовали уже. –
Привет, я разместил свой код. Я пишу как данные буфера отправителя, так и получателя в файл, и оба они одинаковы, но на стороне получателя я не могу разыменовать его в виде переменной структуры. –