我有一个结构
struct control_data{
int column_number;
QString cell;
};
我需要在 QShareMemory 的帮助下将它发送到另一个线程。我读到你不能这样做,因为 QString 里面包含指针。还有其他方法吗?
我有一个结构
struct control_data{
int column_number;
QString cell;
};
我需要在 QShareMemory 的帮助下将它发送到另一个线程。我读到你不能这样做,因为 QString 里面包含指针。还有其他方法吗?
您必须将结构序列化为 Byte 数组。您始终可以将您的转换QString
为const char*
这样的:
myString.toStdString().c_str();
但是序列化 QString 应该可以。
第一步是将您的结构序列化为QDatastream
使用 Qt 的示例,此处为示例。
然后,一旦您的结构可以被读取和写入,您就可以将其传递给共享内存。
可以在此处找到使用 QSharedMemory 的完整示例。
以下是相关代码:
// First, test whether a shared memory segment is already attached to the process.
// If so, detach it
if (sharedMem.isAttached())
{
sharedMem.detach();
}
...
QBuffer buffer;
buffer.open( QBuffer::ReadWrite );
QDataStream out( &buffer );
out << youStruct;
int size = buffer.size(); // size of int + size of QString in bytes
if ( !sharedMem.create( size ) ) {
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(), size ) );
sharedMem.unlock();