Qlocalserver/Qlocalsocket中的内存泄漏



我在使用qlocalserver/qlocalsocket时有一些问题。

我正在将原始像素数据从服务器发送到客户端,并且进程时有一个巨大的内存泄漏。但是我不知道原因是什么...

内存增加了约20mb/1sec(当我在系统管理员中用眼睛检查时)

以下是我的代码。

服务器

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);
}

这两个代码可以很好地通信,但是在一定级别上,记忆的增加非常急剧和终止。

我尝试过像 connection-> reset()或qbyTearray :: clear()..

我的问题有任何想法吗?

使用 qtcpserver/qtcpsocket 这可以解决我的问题吗?

请分享您的想法。谢谢!

这应该发生,因为命名的管道存储了所有数据,直到您关闭它为止。作为解决方案,您应该致电 disconnectFromServer() for套接字(在发件人或接收方的侧面 - 无关紧要),一旦您发送/接收到一个数据包的数据足够。

相关内容

  • 没有找到相关文章

最新更新