我在清除QLocalSocket方面有问题。
现在我通过QLocalServer/QLocalSocket.发送和接收图像数据
但在接收程序中,由于内存中图像数据的堆积,内存大量增加。
所以,我想在读取数据时清理套接字。
但是在QLocalSocket引用中似乎没有函数。
我怎么才能清除插座?
发布于 2017-05-09 15:59:48
看起来,避免这种行为的唯一方法是关闭套接字(未命名的管道服务器),并在收到足够数据后再次打开它。另外,请注意,只是关闭套接字和使用相同的实例(即在堆栈上创建的套接字)给我带来了很多麻烦。
我下一条路要这样做:
在发送方,您有:
dataSocket->write((char*)data, sizeof(data));
dataSocket->disconnectFromServer();在客户端:
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*)¤tFrame, sizeof(currentFrame)) > 0) {
}
}其中currentFrame是预定义的已知数据结构。
对于我来说,这不是最优雅的解决方案,我仍然在研究如何避免无限的新/删除avoid操作。但是没有它们,我就会在发件人端得到随机的写入错误(看起来Qt事件循环是在套接字句柄关闭后删除套接字句柄,而不是删除该套接字的私有数据)。
https://stackoverflow.com/questions/41053457
复制相似问题