QNetworkRequest request;
QNetworkAccessManager networkManager;
QString url = QString("http://www.baidu.com");
QString dataStr = QString("sn=%1&c=QUERY_RECORD&tsid=%2&p=unit_process_check").arg("SerialNumber").arg("CTUM102CQATP190-01");
request.setUrl(QUrl(url));
request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/x-www-form-urlencoded"));
request.setHeader(QNetworkRequest::ContentLengthHeader, QVariant(dataStr.length()));
QByteArray responseData;
QEventLoop eventLoop;
QTimer timer;
timer.setInterval(150);
timer.setSingleShot(true);
connect(&networkManager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
timer.start();
QNetworkReply *reply = networkManager.post(request, dataStr.toLocal8Bit());
eventLoop.exec();
if(timer.isActive())
{
timer.stop();
if(reply->error() == QNetworkReply::NoError)
{
responseData = reply->readAll();
QString recvData = QString(responseData);
qDebug() << ++m_count << recvData;
}
}
else
{
qDebug() << "timeout";
}
disconnect(reply, &QNetworkReply::finished, &eventLoop, &QEventLoop::quit);
disconnect(&networkManager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
reply->close();
reply->deleteLater();
reply = NULL;
上面代码没有主动申请内存,但是如果频繁的调用内存会持续增大,很奇怪!!!
修改方法是将networkManager声明为类成员函数QNetworkAccessManager *m_networkManager,并在初始化时分配内存,后面的代码对应修改,这样修改后发现内存就不会持续变大了。
如果是线程内request,需要在线程内改成信号槽的形式,把request放到槽函数内。
记录下,避坑。。。