GPSデータを受信し、データベースに保存してサーバーに投稿しようとするsymbian用のQtアプリケーションがあります。最初の 2 つのステップは正常に機能しますが、投稿を続けると、アプリケーションがクラッシュするか、インターネット接続が切断されます。
デバッグ目的でアプリケーションを変更して、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 がオンになっていることはわかりますが、Web ブラウザを使用したインターネットへの接続は失敗します。アプリケーションを閉じて、ブラウザーでインターネットに接続しようとすると、「Web: メモリがいっぱいです...」と表示されます (アプリからの Web 要求は正常に動作します) Nokia Energy プロファイラーを使用していますが、メモリの兆候は見られませんいっぱいです。これをテストして、2 つのゲーム、ovi マップ、およびその他の多数のアプリケーションを開始したところ、40MB を超えるメモリを消費したにもかかわらず、正常に動作しました。