hallo, ich verwende libcurl, um in einem c-programm daten von http-servern zu laden. dabei verwende ich um die 20 threads. jeder thread hat eine verbindung, mit der er daten lädt. allerdings will ich nicht 20 callback-funktionen deklarieren. ist es nicht möglich, die empfangenen daten statt in eine datei oder über die callback-funktion direkt in einen buffer zu schreiben? eine einzige callback-funktion würde mir auch nicht helfen, da sich dann ja die threads blockieren. mfg laurenz
Gast
#2173714
Programmier doch einen Callback und gib dem mit CURLOPT_WRITEDATA einen Parameter auf irgendeinen Puffer mit.
sieht gut aus, werde ich gleich mal testen. aber dann ruft doch immernoch jeder thread die callbackfunktion auf, was ja eigendlich nicht gewollt ist, oder?
Gast
#2173727
Spricht was dagegen? Du musst dann halt dafür sorgen, dass dein Callback eintrittsinvariant ist. Das heißt, er darf nur von dem abhängen, was du ihm als Parameter mitgibst, und nicht noch von globalen Variablen o.ä.
stimmt, du hast recht. da es ja um das herunterladen von daten geht, wird die funktion wohl kaum bremsen.
Gast
#2173883
Huch, jetzt wollt ich grad ne Änderung für Deinen Code posten un nu isser wech :( Hier trotzdem:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
Gast
#2173886
Ok, man sollte natürlich das abschließende '\0' bei Strings nicht vergessen :(
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
so, jetzt hab ich eine funktionierende funktion:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
ich musste auf den zeiger buf noch den startwert (tmp) addieren, da ja sonst immer wieder bei 0 angefangen würde.
Gast
#2176511
Laurenz K. schrieb: > ich musste auf den zeiger buf noch den startwert (tmp) addieren, da ja > sonst immer wieder bei 0 angefangen würde. Richtig. Du machst das aber bei jedem Schleifendurchlauf. Einmalig vor der Schleife reicht vollkommen. Genau dazu dient folgende Zeile im Posting davor:
1 | |
Wenn Du Glück hast erkennt das der Compiler aber auch selber und der erzeugte Maschinecode ist eh derselbe. Du hast allerdings denselben Fehler gemacht wie ich und die abschließende Null vergessen. Ohne die funtioniert das strlen nicht! Und eine Überprüfung, ob im durch buf angegebene Puffer überhaupt noch genug Platz ist wäre wohl ebenfalls angebracht. CU
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.