2

QSharedMemoryaが書き込まれたときにシグナルを取得しようとしています。次の方法で数回試しました。

QSharedMemory *sm = new QSharedMemory("key", this);
QByteArray *ba;
QBuffer *buff;
if(sm->create(1024))
{
    ba = new QByteArray();
    ba->setRawData((char*)sm->data(), sm->size());
    buff = new QBuffer(ba, this);
    connect(buff, SIGNAL(readyRead()), this, SLOT(bufferReadyRead()));

    memset(sm->data(), NULL, sm->size());
    QByteArray response = myDomDoc.toByteArray();

    sm->lock();
    buff->open(QIODevice::ReadWrite);
    memcpy((char*)sm->data(), response.data(), sm->size()-1);
    buff->close();
    /****Here I want the QBuffer's readyRead() signal to emit ****/
    sm->unlock();
}

私の試みは少しゆがんでいるかもしれませんが、あなたがその考えを理解してくれることを願っています. 誰かがに書き込んだときに信号を取得できるようにQBuffer、データをラップしようとしています。QSharedMemoryQSharedMemory

これはこれを行う良い方法ですか?それを行うより良い方法はありますか?そうでない場合、私の書き込み時にシグナルを取得する最良の方法は何ですかQSharedMemory

問題は、共有メモリデータに書き込むとすぐに QByteArray がコピーオンライトを実装するため、QBufferそのデータに書き込まれたものを検出しないことだと思います。

私は正しいですか?

よろしくお願いします。

4

0 に答える 0