Unterschied CSocket - CAsyncSocket
-
Worin liegt der Unterschied? Welche Auswirkungen hat das, wenn ich damit programmiere?
-
CSocket:
Alle Befehle arbeiten SNYC. (Blockierend)CAsyncSocket: Sag dann der Name schon. (Nicht blockierend)
-
Was heißt "blockend"?
-
höchtswahrscheinlich dass sie auf den gleichen thread ausgeführt werden, und die arbeit des thread unterbrochen wird wenn socket befehle am werkeln sind.
Nicht blockend wäre dann höchstwahrscheinlich mehrere Threads die nebeneinander laufen. (parallel)
-
@Nitromaus
Das gilt für Threads. Bei Sockets heisst das blockend, dass eine Funktion zum 'Downloaden' erst zurückkehrt, wenn das komplette File runtergeladen ist. Mit anderen Worten: Blockierung
-
Wenn ich CAsyncSocket verwende, kann mein Programm, ohne dass ich selbst Threads verwende, gleichzeitig z.B. Mails versenden und auf Benutzereingaben reagieren?
-
Nein
z.B. Ein Dialog hat einen Mainthread.
Ruft man den Dialog mit DoModal() auf so kehrt DoModal erst zurück wenn der Dialog geschlossen wird.Das gleiche bei CSocket
Ruft man send auf kehrt send erst zurück wenn das senden abgeschlossen wurde.
Ruft man jetzt Send von CAsync auf kehrt send sofort zurück und man kann mit dem Code weiter machen.
Ist der Sendevorhang jetzt beendet dann bekommt man eine Message die man nun verarbeiten muss.Mailverarbeitung hat nichts mit den Funktionen von CAsyncSocket zu tun.
Es werden nur die Funktionen Async verarbeitet aber nicht dein Code.
-
@Unix-Tom
Widersprichst Du Dir jetzt nicht selbst?Du schreibst zum einen, dass bei CAsyncSocket die Funktion Send sofort zurückkehrt und der Code weiterverarbeitet wird, und zum anderen, dass Code in Folge von Benutzereingaben trotzdem nicht ausgeführt wird.
Ich habe zwar noch nix mit CAsyncSocket gemacht, aber ich denke, dass ein nichtblockierender Socket im Hintergrund seine Arbeit verrichtet, während die Messageloop trotzdem weiterverarbeitet wird.
Allerdings wird immer, wenn der Sendebuffer leer wird, die Funktion OnSend aufgerufen, in der dann der Benutzer den Buffer wieder füllen muss. Ok, in dieser kurzen Zeit wird logischerweise die Messageloop nicht verarbeitet.[ Dieser Beitrag wurde am 06.03.2003 um 13:30 Uhr von RenéG editiert. ]
-
Und welche Klasse muss ich für POP3/SMTP einsetzen?
-
Habe mich vielleicht falsch ausgedrückt.
Es werden nur die Funktionen der Klasse CAsyncSocket auch Async verarbeitet.
In der von CAsyncSocket abgeleiteten Klasse überschreibt man dann die Funktionen die man braucht.
z.B. OnConnect,OnRecieve,OnSend,OnClose, etc.Mach man einen Connect gehts im Dialog dann weiter mit der MessageLoop und OnConnect wird aufgerufen wenn der Connect Error oder Connected liefert.
Das gleiche bei send, etc.Wie das die MFC im Hintergrund macht (Threads oder sonst was), damit habe ich mich noch nicht beschäftigt und werde es auch so schnell nicht.
Der Connect erfolgt also im Hintergrund wärend der User eingaben oder sonstwas machen kann.
Startet er jedoch eine lange Schleife wird der Connect zwar beendet aber das programm erfährt nichts davon