CreateThread?



  • Hallo Gemeinde,

    wenn man die funktion gethostbyname ausführt und man hat z.Z. kein Internet,
    bleibt das Programm an der stelle erstmal stehen. Wenn man diese funktion aber in
    CreateThread ausführt, müsste das Hauptprogramm weiterlaufen oder?

    mfg.



  • gethostbyname() ist depreciated. Lies die Doku und nimm die Funktion, die stattdessen empfohlen wird.



  • Das war doch überhaupt nicht die Frage, Swordfish!



  • Ist das die alternative von gethostbyname ->getaddrinfo?



  • 1. @wtf: Ist doch vollkommen egal. Andere Funktionen, die für Namensauflösung gemacht sind (Hint: getaddrinfo ), haben - zumindest auf meiner glibc-Machine - das Problem nicht. Da sagt einem die Funktion sofort, dass keine Verbindung da ist.

    2. @daa531: ja, die Funktion habe ich oben schon genannt.

    3. Zu CreateThread : erstens ist das eine WinAP-Funktion - und keine standardisierte Funktion -, zweitens kannst du dir bei der Synchronisierung dann in den Fuß schießen.

    Überleg mal: wenn du das Holen einer Adresse in einen weiteren Thread auslagerst, wann weiß denn der erste Thread, wann die Funktion fertig ist? Das ist gleichzeitig der Vorteil und der Nachteil von asynchroner Ausführung. Es kann - wird wahrscheinlich irgendwann auch - so sein, dass Thread Nummer 1 auf Daten zugreifen will, die Thread Nummber 2 noch gar nicht gesetzt hat - weil Nummer 2 halt hängengeblieben ist, weil du am Ende doch gethostbyname verwendet hast, weil's so einfacher ist als getaddrinfo .

    Oder du wartest halt einfach, bis dir Thread Nummer 2 signalisiert, dass er fertig ist, mit einem bestimmten Ergebnis (Zeiger zu der Datenstruktur, oder 0, oder -1, oder was auch immer). Nennt sich "joinen". Aber dann hast du wieder das Problem, dass Thread Nummer 1 auf Nummer 2 wartet, bis er ihn joinen kann. Im Grunde hast du also nichts gewonnen, sondern nur das Problem verschoben - aber bestehen bleibt es ja dennoch.

    Lösen kannst du das Problem entweder, indem du eine ordentliche Funktion verwendest (s.o.), oder indem du direkt eine eigene Funktion für die Namensauflösung machst. Und als jemand, der 60% Prozent seiner Zeit Netzwerkprogrammierung macht, sage ich dir: nimm die ordentliche Funktion und versuche dich nicht daran, eine eigene Funktion auf die Beine zu stellen.



  • Danke für die Info.


Anmelden zum Antworten