У меня есть приложение Qt для symbian, которое получает данные GPS, сохраняет их в базе данных и пытается отправить их на сервер. Первые два шага работают нормально, но постоянная публикация либо приводит к сбою моего приложения, либо к разрыву моего интернет-соединения.
Я изменил свое приложение для целей отладки, чтобы оно отправляло данные на сервер только каждую 10-ю секунду. Приложение работает нормально в течение 45-90 минут без значительного увеличения памяти.
После этого я получу ошибку от QNetworkReply, говорящую «Невозможно выделить память» .
В то же время использование памяти увеличивается примерно на 63500 (байт?).
При следующей загрузке я получу ответ, который говорит «Неверный дескриптор сокета» , и после этого мой вывод отладки QtCreator заполняется исключением «на 7 [будет делать setdefaultif (0) - взломать ""
Кто-нибудь знает, что здесь происходит не так? Я не могу найти ошибки в своем коде загрузки, которые могут быть причиной этого.
Вот мой скрипт загрузки.
void MainWindow::upload() {
//Content of postData below. Using same data on every upload now when tracking the bug
//[{"timestamp":"2010-10-01T17:10:27","latitude":62.1823321,"longitude":25.73226825,"user":6}]
QByteArray postData;
QNetworkRequest request;
request.setUrl(uploadUrl);
this->qnam->post(request, postData);
}
void MainWindow::serviceRequestFinished(QNetworkReply* reply) {
QByteArray bytes = reply->readAll();
if (reply->error() == QNetworkReply::NoError)
{
//nothing in here when debugging
} else {
qDebug() << "-------Reply error: " + reply->errorString();
}
reply->deleteLater();
updateHeapStats();
}
void MainWindow::updateHeapStats() {
#ifdef Q_OS_SYMBIAN
TInt mem, size, limit;
User::Heap().AllocSize(mem);
size = User::Heap().Size();
limit = User::Heap().MaxLength();
qDebug() << "**DEBUG MEMORY - > Memory: " << QString::number(mem);
qDebug() << "**DEBUG MEMORY - > Heap limit: " << QString::number(limit);
qDebug() << "**DEBUG MEMORY - > Heap size: " << QString::number(size);
#endif
}
Чаще всего забыл, я проверил это с Nokia N97mini, 5230 и 5800, и все они ведут себя одинаково.
редактировать. Забыл упомянуть, что, когда интернет-соединение "умирает", я все еще вижу, что 3G включен, но не удается подключиться к интернету через веб-браузер. Когда я закрываю приложение и пытаюсь подключиться к Интернету через браузер, он говорит: «Интернет: память заполнена, ...» (веб-запросы из приложений работают нормально) Я использую профилировщик Nokia Energy, и он не показывает никаких признаков памяти быть полным. Даже проверил это и запустил 2 игры, ovi-карты и множество других приложений, и они работали нормально, хотя они занимали более 40 МБ памяти.