Cześć,
tworzę aplikację w QT/C++, która musi pobierać raz na jakiś czas pewne dane XMLowe wystawiane na stronie. Problem w tym, że są one w kilku plikach, więc muszę pobrać każdy z nich osobno i wyciągnąć
to, co mnie interesuje i wrzucić do bazy (sqlite). Dalsze operacje na danych będą już wykonywane z użyciem bazy danych.
Mam teraz następujące pytania.
Dane pobieram wykorzystując klasę QNetworkAccessManager, zastanawiam się czy mogę użyć tego samego obiektu by pobrać wszystkie dane w taki sposób jak poniżej?
void MainWindow::on_update_data_clicked()
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(process_data(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://website.com/api/file1.xml")));
manager->get(QNetworkRequest(QUrl("http://website.com/api/file2.xml")));
manager->get(QNetworkRequest(QUrl("http://website.com/api/file3.xml")));
manager->get(QNetworkRequest(QUrl("http://website.com/api/file4.xml")));
}
void MainWindow::process_data(QNetworkReply *reply)
{
//jakies przetwarzanie odpowiedzi
}
Czy to jest bezpieczne? Na przykład w momencie, gdy dane z *file1 *bedą jeszcze przetwarzane w metodzie process_data, a zostaną już pobrane dane *file2 *i metoda process_data zostanie wywołana kolejny raz.
Jak odróżnić w process_data, który plik przetwarzać, bo każdy z plików jest inny? Czy lepiej stworzyć 4 obiekty QNetworkAccessManager i jakiegoś enuma identyfikującego dany manager i przekazywać informacje o tym do metody process_data?
W jaki sposób najlepiej trzymać dane wyciągnięte z XMLi przed wrzuceniem ich do bazy? Powiedzmy, że z kilku XMLi wyciągam dane, które trafią do jednej tabeli w bazie. Będzie to np. jakes 1-2k rekorów. Myślałem by stworzyć sobie własny kontener na wektorach i tam je przechowywać przed wykonaniem zapytania do bazy.
Dzięki za wskazówki.