warten bis http seite komplett geladen ist

Alles rund um die Programmierung mit Qt
Goddchen
Beiträge: 12
Registriert: 18. Oktober 2006 15:12
Kontaktdaten:

warten bis http seite komplett geladen ist

Beitrag von Goddchen »

hi, ich habe ein programm in dem ich QHttp::get(QString) aufrufe um eine URL zu holen... dann wird ja ein requestFinished(int, bool) emittet... das funzt alles einwandfrei. ich krieg den quelltext und alles, kein proble. mein problem ist:
ich rufe mehrere URLs aus einer QStringList auf. ich will die jetzt hintereinander aufrufen. und nun das wichtige: ich will, dass die nächste urls erst dann bearbeitet wird wenn die vorherige komplett abgearbeitet wurde. wie stell ich das an? wie warte ich so lange bis mein slot, der mit requestFinished(int, bool) connected ist, fertig gelaufen ist und mache dann erst in meiner schleife, die die URLs aus der StringList liest weiter?

Gr33tz Goddchen
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Alles in eine Liste packen und erst bei requestFinished() den nächsten QHttp::get() aufrufen.
Aber warum willst Du nicht mehrere Requests gleichzeitig wegschicken?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Goddchen
Beiträge: 12
Registriert: 18. Oktober 2006 15:12
Kontaktdaten:

Beitrag von Goddchen »

ja und was für ne abbruchbedingung schreib ich dann in meine schleife? das problem ist ja, dass ich auf diese requestfinished sache keinen einfluss hab... bis das mal eintritt ist die schleife tausend mal durchgelaufen. und irgendwann muss ich ja auch das element aus der liste rauslöschen welches ich mit get() hole...
die sache ist die, durch das das get() kommen in die liste wieder neue elemente, die danach auch wieder mit get() geholt werden müssen.
ich hab das problem, dass ich halt reinschreib while(liste.size()!=0)... aber dann geht das erste get() los, das element wird gelöscht, und die while bedingung wird geprüft bevor das get() die nächsten elemente in die liste gepackt hat... deshalb muss ich warten bis das requestfinished fertig gelaufen ist bevor das nächste mal die while bedingung geprüft wird.
ich sollte also irgendwie verhindern, dass die while bedinungen überprüft wird, so lange das request nicht fertig behandelt ist und die neuen sachen in der liste stehen
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ok, dann eben sequenziell. Einfach in requestFinished() ein neues get() aufrufen wenn liste.size() != 0
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Goddchen
Beiträge: 12
Registriert: 18. Oktober 2006 15:12
Kontaktdaten:

Beitrag von Goddchen »

mhm, das werd ich mal testen, hoffentlich funktioniert es, es ist nämlich ein thread, hoffe der wird nicht beendet wenn die run methode durchgelaufen ist. ich schreib dann ob's geklappt hat
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Dann musst Du eben in run() warten bis alles fertig ist.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Goddchen
Beiträge: 12
Registriert: 18. Oktober 2006 15:12
Kontaktdaten:

Beitrag von Goddchen »

ja ganz genau das war ja meine frage, wie stell ich das an?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Du hast doch Zugriff auf liste, oder?
dann ein

Code: Alles auswählen

while(!list.isEmpty())
  sleep(kurze Zeitspanne);
Alerdings dachte ich das die requestFinished() - Methode im gleichen Thread ist, oder? Dann kannst Du auch eine Variable bReady setzen um zu signalisieren dass die Liste jetzt leer ist.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Goddchen
Beiträge: 12
Registriert: 18. Oktober 2006 15:12
Kontaktdaten:

Beitrag von Goddchen »

und was schreib ich dann in die while schleife rein?
while(!bReady) geht ja nicht, dann springt sie ja gleich raus...
meinst du so was wie in der schleife nochmal while(!bReady) {}?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Hier noch besser und richtiger:
http://doc.trolltech.com/4.2/qthread.html#exec
und was schreib ich dann in die while schleife rein?
Habe ich doch schon geschrieben... :roll:
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Goddchen
Beiträge: 12
Registriert: 18. Oktober 2006 15:12
Kontaktdaten:

Beitrag von Goddchen »

also mit so einer schleife funktioniert es leider schonmal nicht :( es scheint so als ob der Thread, wenn er in einer solchen schleife ist, alle signale ignoriert oder nicht mehr bearbeiten kann... denn ich komme dann gar nicht mehr in die funktion die mit finishedRequest connected ist :(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Liest Du überhautp was ich schreibe?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Goddchen
Beiträge: 12
Registriert: 18. Oktober 2006 15:12
Kontaktdaten:

Beitrag von Goddchen »

ja natürlich, aba ich poste halt immer das was ich gerade probiert habe... jetzt hab ich grad das mit exec getestet... bei der ersten URL die bearbeitet wird funktioniert das noch und dann ist ende gelände...
bei der erste URL wartet exec() bis ich quit() aufrufen... und bei den nächsten sage ich exec() die funktion returned sofort und es geht weiter... exec() wartet nicht mehr bis ich quit() aufrufe :(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Kannst Du mir mal sagen was Du da machst? Natürlich beendet sich der trhead wenn Du quit aufrust... Warum machst Du es nicht einfach so wie ich es gesagt habe und rufst in requestFinished die nächste URL auf?

/edit
Ich mein wie haben doch alles hier diskutiert wie es zu machen ist, oder?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Christian81 hat geschrieben: Ich mein wie haben doch alles hier diskutiert wie es zu machen ist, oder?
Ich glaube, du darfst hier gar nicht schreiben. Da is hier sicher nur ein Blog von Goddchen ;)

Goos
Antworten