Was ist ein handle in der Software
-
Hallo,
immer wieder stolpere ich über den Begriff "Handle" in der Software. Ich benütze auch das Ganze, wenn ich unter Windows programmiere.
Aber was passiert wirklich in der Software. Gibt es vielleicht ein Beispiel in C geschrieben, damit man die Wirkungsweise nachvollziehen kann.
Im Web und hier im Forum habe ich diesbezüglich nichts gefunden.
Vielen Dank für euere Mühe.Gruß
Krasstala
-
Ist im Prinzip nur ein Zeiger.
-
-
@TactX -> Artikel in Wiki war mir bekannt. Ist mir aber zu Allgemein.
Trotzdem vielen Dank.Gruß
krasstala
-
-
Danke masterofx32!
Leider klärt auch dieser Thread das Problem für mich nicht!
Gehen wir von Folgendem aus. Wir haben ein Eeprom. Und auf diesem Eeprom wollen mehrere Teilnehmer gleichzeitig zugreifen. Geht aber nicht.
Deswegen müßte eine Art Jobverwaltung jetzt die vielen Anfragen vernünftig einsortieren und abarbeiten.
Ich kann mir vorstellen, dass das Ergebnis der Abarbeitung am besten mit einem Jobnummer (=Handle) überwacht werden kann. Die Nummer wird durch ein Request von der Verwaltungseinheit an den Anfordernden vergeben. Was sagt Ihr dazu!
-
Hallo
scheint als hättest du doch begriffen, wofür Handles gebraucht werden.
Eine Eigenschaft von Handles ist, das der Benutzer des Handles gar nicht wissen muß, was hinter dem Handle steht, ob nun ein Pointer (Adresse) oder ein Index in einer Liste (wie du es mit der Jobnummer gemeint hast).
Der Benutzer bekommt einfach von der Verwaltung eine eindeutige ID, und kann damit dann individuelle Aufgaben ausführen, indem der diese ID immer an die Verwaltung zurückgibt.bis bald
akari
-
krasstala schrieb:
Danke masterofx32!
Leider klärt auch dieser Thread das Problem für mich nicht!
Gehen wir von Folgendem aus. Wir haben ein Eeprom. Und auf diesem Eeprom wollen mehrere Teilnehmer gleichzeitig zugreifen. Geht aber nicht.
Deswegen müßte eine Art Jobverwaltung jetzt die vielen Anfragen vernünftig einsortieren und abarbeiten.
Ich kann mir vorstellen, dass das Ergebnis der Abarbeitung am besten mit einem Jobnummer (=Handle) überwacht werden kann. Die Nummer wird durch ein Request von der Verwaltungseinheit an den Anfordernden vergeben. Was sagt Ihr dazu!Verstehe nicht ganz, wo das Verständnisproblem liegt. Für die Jobverwaltung hat das Handle nur die Bedeutung, die Teilnehmer zu identifizieren. Jemand, der auf das Eeprom über die Jobverwaltung zugreifen will, würde eine mögliche Funktion RegisterForEepromAccess aufrufen und erhält sein Handle. Bei den nächsten Aufrufen an die Jobverwaltung nutzt er wieder dieses Handle, da die Jobverwaltung sonst keine andere Möglichkeit hätte, die Anfrage zuzuordnen.
-
SG1 schrieb:
Ist im Prinzip nur ein Zeiger.
falsch. Zeiger sind Zeiger, Handles sind Handles. Da auf Wikipedia ist das auch nicht so toll erklärt.
Handles sind einfach ne Zahl meist UINT oder sowas. Kann man sich als ID eines Objektes vorstellen. Der Nutzer kann sich sein Objekt irgendwie "merken", ohne das der Server einen Zeiger auf das gewünschte Objekt preisgibt.Z.B. Dateiarbeit, da bekommst du immer ein Filehandle. Und das BS weis dann intern, welche Datei zu dieser Zahl gehört. Du bekommst nie direkten Zugriff auf die Datei, sondern kannst nur per Handle kommunizieren. Dadurch hat das BS Kontrolle was passiert, weil halt kein Zeiger irgendwie rausgegeben wurde.
-
im Prinzip
-
b schrieb:
im Prinzip
Zeiger != Handle
auch nicht im nicht Nicht-Prinzip
-
Pellaeon schrieb:
b schrieb:
im Prinzip
Zeiger != Handle
auch nicht im nicht Nicht-Prinzip
doch
-
b schrieb:
Pellaeon schrieb:
b schrieb:
im Prinzip
Zeiger != Handle
auch nicht im nicht Nicht-Prinzip
doch
NEIN das ist falsch, erzähl net so ein Stuss im Forum. Ein Zeiger zeigt auf etwas, ne ID und damit ein Handle zeigt NICHT auf etwas, also ist es auch im Prinzip kein Zeiger o_O
-
Äh, ein Handle zeigt im Grund doch auch nur auf eine Resource. Ein Zeiger enthält im Grunde auch nur eine Zahl, die auf eine Resource verweist. Ich seh nun dein Problem nicht, warum ein Zeiger kein Handle sein sollte.
-
@Pellaeon:
Du liegst falsch! Das hört sich ganz nach Halbwissen an, was du verbreitest. Ein Hanle ist ein abstrakter Begriff. Daher kann ein Handle durchaus auch ein Zeiger sein.
Kleiner Tipp: falls du dich mit WinAPI und/oder mit der MFC auskennst, kannst du ja einfach mal im Debugger schauen was für einen Wert ein HTREEITEM (Handle auf ein Treecontrol-Item) hat.
-
Ich habe mir mal die MFC Sourcen genauer angeschaut. Ich kann in diesen Bibliotheken keine in sich geschlossene Vorgehensweise erkennen. Es schaut alles irgendwie herumgedoktert aus. Über .NET kann ich nicht mitreden.
Sicherlich kann man einen Zeiger zurückgeben um gewisse Informationen zu bekommen. Die Diskussion hier in diesem Thread beweißt mir eigentlich, dass es doch keine einheitliche Vereinbarung existiert.Handle == Zeiger oder ID Nummer??
Außerdem sehe ich einen Unterschied zwischen Embedded World und Windows World.
Leider kann ich über die Linux Welt nichts sagen. Vielleicht gibt es Linux World Forumteilnehmer, die sich dazu äußern könnten.
-
Man soll gar nicht wissen was hinter einem Handle steckt.
-
handle schrieb:
Man soll gar nicht wissen was hinter einem Handle steckt.
Sogar noch ganz anders: Man will es einfach gar nicht.
(btw. ein Handle muss auch keine Zahl sein)
-
@krasstala:
Du machst dir zuviele Gedanken um Handles. Das Wort Handle ist einfach nur ein abstrakter Begriff. Was genau dahinter steckt ist nicht wichtig und soll auch nicht wichtig sein. Ein Handle ist nichts, was fest in der Programmiersprache eingebaut ist und erst recht kein Standard. Im Prinzip wurde das so ähnlich dir jetzt schon ein paar mal gesagt.Was Handles genau sind kann von API zu API oder Bibliothek zu Bibliothek anders sein. Sogar innerhalb einer bestimmten API können sie anders implementiert sein (siehe WinAPI). Meistens taucht das Wort Handle in Sprachen auf, die keine direkten Sprachmittel zur objektorientierten Programmierung bieten. Beispielsweise C oder Pascal. Böse gesagt ist das dann OOP für Arme.
Hier mal ein Beispiel in Pseudocode:
FensterHandle mein_fenster = fenster_erstellen(10, 10, 200, 200, "Test-Fenster"); fenster_zeigen(mein_fenster); fenster_setze_titel(mein_fenster, "Ein anderer Titel"); fenster_schliessen(mein_fenster);
Würde man das in einer Sprache mit OOP-Sprachmitteln machen, wäre mein_fenster eine Instanz von Fenster:
Fenster mein_fenster(10, 10, 200, 200, "Test-Fenster"); mein_fenster.zeigen(); mein_fenster.setze_titel("Ein anderer Titel"); mein_fenster.schliessen();
krasstala schrieb:
Leider kann ich über die Linux Welt nichts sagen. Vielleicht gibt es Linux World Forumteilnehmer, die sich dazu äußern könnten.
Unter Linux ist das auch nicht anders. Es gibt Bibliothek in denen der Begriff Handle auftaucht, um das zu erreichen was ich dir gerade erklärt habe.
-
Ein Handle is ein bitwise kopierbares, meist der Größe eines Maschinenwortes entsprechendes Objekt das zur Referenzierung anderer meist nicht trivialer Objekte dient. So sind nun alle Klarheiten beseitigt? :p
CPU Speicher Handles werden oft als "Zeiger" bezeichnet. Jedoch sind "Zeiger" im eingentlichen Sinn des Wortes nicht so restriktive zu sehen und bezeichnen allgemein ein zeigendes im Sinn von referenzierendes Objekt.