0

QLocalServer/QLocalSocket の使用に問題があります。

サーバーからクライアントに生のピクセル データを送信していますが、処理中に大量のメモリ リークが発生します。でも何が原因か分からなかった…

メモリが約20MB/1秒増えます(システム管理者に目で確認したところ)。

以下は私のコードです。

サーバ

void qsharedServer::updateImageData(unsigned char* r_data, int r_width, int r_height, int r_step, int r_label_i){

QLocalSocket* connection = 0;
connection = clientSocket;

if (connection)
{
    if (connection->isOpen())
    {
        QByteArray block;
        QDataStream out(&block, QIODevice::WriteOnly);

        out.setVersion(QDataStream::Qt_5_7);
        const char* rc_data = reinterpret_cast<const char*>(r_data);

        out <<r_step*r_height<< r_width << r_height << r_step;
        out.writeBytes(rc_data, r_step*r_height);
        connection->write(block);
        connection->flush();
    }
}

クライアント

void qsharedClient::readSocket(){

    QByteArray block = connection->readAll();
    QDataStream in(&block, QIODevice::ReadOnly);
    in.setVersion(QDataStream::Qt_5_7);

    /* Read Raw Data */
    char* data;
    uint size;
    int width;
    int height;
    int step;
    while (!in.atEnd())
    {
        in >> size >> width >> height >> step;
        in.readBytes(data, size);
    }
    emit drawData((unsigned char*)data, width, height, step);
}

これらの 2 つのコードはうまく通信できますが、記憶は非常に急激に増加し、一定のレベルを超えると終了します。

connection->reset() または QByteArray::clear()..etcを試しましたが、うまくいきません。

私の問題に何か考えはありますか??

QTcpServer/QTcpSocketを使用してみませんか?? これは私の問題を解決できますか??

あなたのアイデアを共有してください。ありがとう!!

4

1 に答える 1