首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清除QLocalSocket?

如何清除QLocalSocket?
EN

Stack Overflow用户
提问于 2016-12-09 05:06:42
回答 1查看 521关注 0票数 0

我在清除QLocalSocket方面有问题。

现在我通过QLocalServer/QLocalSocket.发送和接收图像数据

但在接收程序中,由于内存中图像数据的堆积,内存大量增加。

所以,我想在读取数据时清理套接字。

但是在QLocalSocket引用中似乎没有函数。

我怎么才能清除插座?

EN

回答 1

Stack Overflow用户

发布于 2017-05-09 15:59:48

看起来,避免这种行为的唯一方法是关闭套接字(未命名的管道服务器),并在收到足够数据后再次打开它。另外,请注意,只是关闭套接字和使用相同的实例(即在堆栈上创建的套接字)给我带来了很多麻烦。

我下一条路要这样做:

在发送方,您有:

代码语言:javascript
复制
dataSocket->write((char*)data, sizeof(data));
dataSocket->disconnectFromServer();

在客户端:

代码语言:javascript
复制
void LocalSocketClient::requestNewFrame()
{
    if (socket) {
        socket->disconnect();
        socket->deleteLater();
    }

    socket = new QLocalSocket();
    dataStream.setDevice(socket);

    connect(socket, &QLocalSocket::disconnected, this, &LocalSocketClient::requestNewFrame);
    connect(socket, &QLocalSocket::readyRead, this, &LocalSocketClient::readSocket);

    socket->connectToServer(NAMED_PIPE_NAME, QIODevice::ReadOnly);
}

void LocalSocketClient::readSocket()
{
    if(dataStream.readRawData((char*)&currentFrame, sizeof(currentFrame)) > 0) {

    }
}

其中currentFrame是预定义的已知数据结构。

对于我来说,这不是最优雅的解决方案,我仍然在研究如何避免无限的新/删除avoid操作。但是没有它们,我就会在发件人端得到随机的写入错误(看起来Qt事件循环是在套接字句柄关闭后删除套接字句柄,而不是删除该套接字的私有数据)。

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

https://stackoverflow.com/questions/41053457

复制
相关文章

相似问题

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