首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QLocalServer/QLocalSocket中的内存泄漏

QLocalServer/QLocalSocket中的内存泄漏
EN

Stack Overflow用户
提问于 2016-12-12 00:25:06
回答 1查看 230关注 0票数 0

我在使用QLocalServer/QLocalSocket时遇到了一些问题。

我将原始像素数据从服务器发送到客户端,在处理过程中存在巨大的内存泄漏。但我不知道原因是什么..。

内存增加约20 my /1秒(当我在系统管理员中查看时)。

以下是我的密码。

服务器

代码语言:javascript
复制
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();
    }
}

客户端

代码语言:javascript
复制
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()..etc,但是它没有工作。

对我的问题有什么想法吗??

使用QTcpServer/QTcpSocket??怎么样?这能解决我的问题??

请分享你的想法。谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2017-05-09 16:13:00

这应该会发生,因为命名管道存储所有数据直到关闭它。作为一种解决方案,一旦您为一个数据包发送/接收到足够的数据,就应该调用套接字(在发送方或接收方--没关系)的disconnectFromServer()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41092664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档