首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QTcpSocket传输大文件时出现“'Memory”

使用QTcpSocket传输大文件时出现“'Memory”
EN

Stack Overflow用户
提问于 2012-12-16 17:32:40
回答 1查看 627关注 0票数 1

我试图通过将bytesWritten连接到我的函数sendNextBlock,以非阻塞的方式传输一个大文件。

代码语言:javascript
复制
void AsynchronousRetrieveCommand::start()
{
    connect(socket(), SIGNAL(bytesWritten(qint64)), this, SLOT(sendNextBlock()));
    sendNextBlock();
}

void AsynchronousRetrieveCommand::sendNextBlock()
{
    socket->write(file->read(64*1024));
}

我在Symbian手机上运行这段代码,在传输了5-6兆字节后,手机中出现"Memory Full“消息框,调试输出中显示以下消息:

代码语言:javascript
复制
[Qt Message] CActiveScheduler::RunIfReady() returned error: -4

我假设这是某种内存泄漏,但我在代码中看不到是什么导致了它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-16 19:30:37

好吧,事实证明套接字的缓冲区增长不受控制,因为数据输入到套接字的速度比刷新数据的速度要快。

我修复了这个问题,通过检查bytesWritten给出的值,只写入那么多字节(实际上,将缓冲区重新填充到64k)。

我修复的代码现在看起来是这样的:

代码语言:javascript
复制
void AsynchronousRetrieveCommand::start()
{
    connect(socket(), SIGNAL(bytesWritten(qint64)), this, SLOT(sendNextBlock(qint64)));
    sendNextBlock(64*1024);
}

void AsynchronousRetrieveCommand::sendNextBlock(qint64 bytes)
{
    socket()->write(file->read(bytes));
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13900051

复制
相关文章

相似问题

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