Gibt es in Java sowas wie select in C?
-
Danke für die Antworten, aber sowas wie select gibt es Java nicht oder?
Konnte jedenfalls nichts dazu finden.Dennis
-
Was macht select?
-
Mit select kann man, vereinfacht gesagt, schauen ob man von einem Filedeskriptor lesen/schreiben kann, bevor man es versucht. Damit hat man z.B. die Möglichkeit verschiedene Socket-Verbindungen simultan zu überwachen.
Ich kann also mehrere Clients verwalten, ohne für jeden Client einen Thread zu erzeugen. Das ganze ist dann sehr viel ressourcenschonender.
Mehr dazu siehe hier:http://www.rt.com/man/select.2.html
Dennis
-
Du willst also asynchrone Sockets? Das kannst mit deinem eigenen SocketChannel realisieren und Sachen wie isConnected() und validOps implementieren.
Das sind ja auch alles nur Hilfen. Du kannst auch direkt native Methoden aufrufen. SocketChannel und Impl sind nur Hilfen, dass du das kapseln und in Java Sockets verwenden kannst.
-
Signale -> Delegates (meistens über eine inner class realisiert)
Habe ich hier irgendwas verpasst?
Was ist gemeint? Signal&Slot-System? Dann entspricht ein Signal aber keines Falls einem Delegate, da ein Delegtate der Slot ist.
Und verwendet man in Java nicht Observer?
-
Wollte ich mal wissen, gesauso interessiert mich ob es sowas wie Signale gibt
Keine Ahnung, was man daraus folgern soll? Ich habe Signale jetzt als Events interpretiert.
Und verwendet man in Java nicht Observer?
Na dann sag mir mal nen großen Unterschied zwischen nem Observer und nem Delegate, außer dass ein Observer anscheined unabhängig sein soll vom Objekt, was die Events auslöst??
Wikipedia schrieb:
[...] Ändert sich ein Objekt, informiert es jeden angemeldeten Beobachter über die Änderung.
.Net: Klick ich nen Button, informiert dieser alle angemeldeten delegates (bzw. führt sie aus). Diesen Unterschied zugrunde gelegt, kannst aber nicht allgemein dann sagen "man verwendet in Java Observer", weil man manchmal auch nen Observer/Delegate braucht, der das auslösende Objekt kennt.
btw.: Zusammenhang zwischen inner classes und delegates
Zugegeben: Der Beobachter muss keine inner class sein, das bietet sich aber oft an. Wenn er auf das umgebende Objekt nicht zugreifen soll, kann auch ne static inner class noch sinnvoll sein, damit man sie wegkapseln kann. Am Prinzip ändert das ja nichts, es ist egal, wie mein delegate aussieht.
-
Ein Signal würde in C# einem "event" entsprechen.
Observer ist ein Design Pattern, also rein OO, Delegates sind ne Art Funktionszeiger, die optional eine Referenz auf ein Objekt aufnehmen können, damit statt 'ner Funtion 'ne Methode verwendet werden kann. Funktionszeiger sind aber IMHO nicht sonderlich OO, haben deswegen wenig mit den Design Patternzu tun.
-
Ich sehe den Unterschied nicht ganz. Einen Observer würde man in Java als Interface definieren, was bestimmte Methoden hat um Ereignisse entgegen zu nehmen.
Dieses Interface würde ich von einer (vorzugsweise inneren und anonymen) Klasse implementieren lassen, genau wie bei Swing halt.
Mein Link zeigt, dass Delegates letztlich nichts anderes sind als diese Klassen. Der einzige wirkliche Unterschied ist, dass so ein Interface dann mehrere Methoden hat, also auf ganze Gruppen von verschiedenen Events reagieren kann.Delegates sind ne Art Funktionszeiger, die optional eine Referenz auf ein Objekt aufnehmen können
So ein Interface ist in dieser Funktion auch nichts anderes als ein Funktionszeiger. Vergleiche dazu Runnable. In .Net übergibst du nen Funktionszeiger um einen neuen Thread zu starten. In Java ein Objekt, was Runnable implementiert, wobei run() dann auch irgendwas starten kann. Das delegate von .Net ist ein Objekt, meine Klasse, die Runnable implementiert auch.
Der optionale Zeiger auf ein Objekt ergibt sich durch statisch/nicht statisch bei der inner class.Funktionszeiger sind aber IMHO nicht sonderlich OO, haben deswegen wenig mit den Design Patternzu tun.
Ja gut, das ist halt syntaktischer Zucker aber letztlich nichts anderes als die inner classes in Java. Und es sind ja auch eigene Objekte.
Würdest du die Ereignisbehandlung bei .Net nicht als Observer pattern ansehen?Ich hab meinen Button, an dem seinen Click-EventHandler kann ich mit += delegates anmelden und mit -= abmelden. Bei jedem Klick auf den Button werden die delegates ausgeführt/"informiert".
Deinen Observer würdest du auch an- und abmelden und von ihm ne bestimmte Methode aufrufen.Wenn du mal ein Eclipse-Plugin schreibst, wirst du feststellen, dass die Jungs ihre ganzen Interfaces irgendwie mit Delegate genannt haben. IEditorActionDelegate, IMenuActionDelegate, ...
-
OK, kurz: Funktionen und Klassen in ihrer Funktion gleich? Das diese Sichtweise wunderbar funktioniert weiß ich von BETA. Aber so direkt ist mir das in Java und C# nie aufgefallen.
-
Funktionen und Klassen in ihrer Funktion gleich?
Hmmmm ein C#-Delegate ist ja keine Funktion. Es ist ja schon ein eigenes Objekt, dass ich auch rumreichen kann. Praktisch ne Klasse mit nem Funktionszeiger als Member und noch ner optionalen Referenz auf ein Objekt.
So ein Klassen-delegate ist auch ne Klasse mit einem (oder mehreren) Funktionszeigern (dynamisches binden!) und mit ner Referenz auf ein Objekt, falls non-static inner class (man könnte eigentlich sogar beliebige Referenzierungen einbauen?).So irgendwie sehe ich das inzwischen, auch wenn ich das zugegebenermaßen von Sun's Sichtweise übernommen habe.
-
Hmmmm ein C#-Delegate ist ja keine Funktion. Es ist ja schon ein eigenes Objekt, dass ich auch rumreichen kann.
Tja, in C++ kannste, wie du weißt, Funktionen rumreichen (Funktionszeiger, Funktionsreferenzen).
Und schwupps werden Funktionsn first-class Objekte. Willkommen in der Welt der funktionelen Programmierung.