共有メモリの例を見たことがありますか?
http://doc-snapshot.qt-project.org/4.8/ipc-sharedmemory.html
以下は、その例のコードスニペットです。
「サイズ」のバッファを共有メモリに入れるための最初のプロセスは次のとおりです。
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(), size));
sharedMemory.unlock();
2番目のプロセスが共有メモリにアクセスする場合は次のようになります。
if (!sharedMemory.attach()) {
ui.label->setText(tr("Unable to attach to shared memory segment.\n" \
"Load an image first."));
return;
}
QBuffer buffer;
QDataStream in(&buffer);
QImage image;
sharedMemory.lock();
buffer.setData((char*)sharedMemory.constData(), sharedMemory.size());
buffer.open(QBuffer::ReadOnly);
in >> image;
sharedMemory.unlock();
sharedMemory.detach();
ui.label->setPixmap(QPixmap::fromImage(image));
この例では、両方のプロセスが実行中であり、QSharedMemoryのインスタンスが残っている必要があることにも注意してください。ドキュメントでの説明は次のとおりです。
Windows:QSharedMemoryは共有メモリセグメントを「所有」していません。QSharedMemoryのインスタンスが特定の共有メモリセグメントに接続されているすべてのスレッドまたはプロセスがQSharedMemoryのインスタンスを破棄するか終了すると、Windowsカーネルは共有メモリセグメントを自動的に解放します。
お役に立てば幸いです。