Seite 1 von 2

warten bis http seite komplett geladen ist

Verfasst: 15. November 2006 00:25
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

Verfasst: 15. November 2006 06:36
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?

Verfasst: 15. November 2006 10:46
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

Verfasst: 15. November 2006 10:49
von Christian81
Ok, dann eben sequenziell. Einfach in requestFinished() ein neues get() aufrufen wenn liste.size() != 0

Verfasst: 15. November 2006 11:20
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

Verfasst: 15. November 2006 11:24
von Christian81
Dann musst Du eben in run() warten bis alles fertig ist.

Verfasst: 15. November 2006 12:45
von Goddchen
ja ganz genau das war ja meine frage, wie stell ich das an?

Verfasst: 15. November 2006 13:10
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.

Verfasst: 15. November 2006 15:39
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) {}?

Verfasst: 15. November 2006 15:48
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:

Verfasst: 15. November 2006 21:49
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 :(

Verfasst: 15. November 2006 22:10
von Christian81
Liest Du überhautp was ich schreibe?

Verfasst: 15. November 2006 23:23
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 :(

Verfasst: 16. November 2006 06:32
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?

Verfasst: 16. November 2006 09:51
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