AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Handles und Treads

Ein Thema von Getox · begonnen am 25. Jan 2013 · letzter Beitrag vom 26. Jan 2013
Antwort Antwort
Seite 1 von 2  1 2      
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#1

Handles und Treads

  Alt 25. Jan 2013, 11:34
Delphi-Version: 2007
Guten Morgen,

Ich schreibe zur Zeit an einem Programm, wo ich das erste mal mit einem Tread arbeiten möchte. Um die Grundlagen des Treads zu erlernen, beschäftige ich mit dem Tutorial auf Delphi-Treff. http://www.delphi-treff.de/tutorials...ds/einleitung/

Da wird des öfteren von Handles geredet. Auch so ist mir der begriff desöfteren über den Weg gelaufen. Also habe ich mich auf die Suche gemacht. Gestoßen bin ich dann auf folgenden tread hier aus dem Forum:
http://www.delphipraxis.net/84848-handles.html

Eigentlich wollte ich erst eine Antwort in diesem Thema schreiben, aber dann wäre ich vermutlich angemeckert worden, weil ich einen 5 Jahre alten Tread auspacke

Also. Handles sind ja quasi IDs für Fenster. In dem Abschnitt, den man nur lesen soll, wenn man verwirrt werden will, stand, dass Handles aber auch ohne Fenster gibt.

Ja ich bin jetzt leicht verwirrt. Nun habe ich ein paar Fragen.
- Ist es wichtig, dass ich Handles richtig verstehe, bevor ich mich weiter um Treads kümmere?
- Sind die Handles von Threads dann quasi die ID eines Treads?
- Ich weis in dieser Hinsicht icht was ich mir alles anschauen muss und so und das verunsichert mich grade etwas.

Ich weis gerne was ich tu und ich glaube, in diesem Sinne sollte ich mich doch schon auch mit solchen DIngen auseinandersetzen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: Handles und Treads

  Alt 25. Jan 2013, 12:05
Unter Windows gibt es sehr viele Objekte, zu denen es ein Handle geben kann (Prozesse, Threads, Windows, GDI Resourcen, etc.). Handles stellen im Grunde genommen eine Form des einfachen Zugriffs auf systemverwaltete Resourcen (z.b. Kernel Objekte) dar, auf die man normalerweise vom Usermode aus nicht direkt zugreifen kann.

Ein paar wichtige Eigenschaften von Handles:
  • ein Handle gillt (in der Regel) nur in dem Prozess, in dem es per WinAPI erstellt oder geöffnet wurde
  • die Meisten Handles können neben dem Objekt, das sie beschreiben, auch Zugriffsrechte speichern

Ein Handle ist somit viel mehr, als eine einfache ID. Im Gegenteil sogar, ist ein Handle nicht eindeutig. Jeder Thread hat eine ThreadID (z.b. die Nummer 500), die Systemweit gültig ist und den Thread eindeutig beschreibt. Über OpenThread() kann man sich nun über die ID ein Handle des Threads (z.b. die Nummer 1000) beschaffen, mit dem man dann Operationen wie SuspendThread() oder TerminateThread() ausführen kann. Ruft man jetzt aber z.b. ResumeThread(1000) aus einem anderen Prozess aus, wird die Operation fehlschlagen, da das Handle 1000 nur in dem Prozess gültig ist, in dem es erstellt bzw. geöffnet wurde.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Handles und Treads

  Alt 25. Jan 2013, 12:26
Handles gibt für ziemlich viele Objekte in Windows, das was dahinter liegt sind 4 Byte als Longword.
Im Kontext sind das dann z.B.
HWND = type LongWord; HRGN = type LongWord;HBITMAP = type LongWord;HBRUSH = type LongWord; etc.
(Du kannst ja mal in die Windows.pas schauen) oder hier http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Handles und Treads

  Alt 25. Jan 2013, 12:30
Für den Anfang reicht es aber total aus, nen Handle mehr oder wniger als ID zu sehen - zum besseren Verständnis.

Noch etwas - es heißt Threads, nicht Treads
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Handles und Treads

  Alt 25. Jan 2013, 12:58
Ich fasse Zacherl noch mal so zusammen wie ich es verstanden habe:
Handles sind da, um bestimmte Aktionen an etwas auszuführen. Das Fenster, der Thread oder was auch immer hat schon eine eigene ID. Das ist aber egal, da man im Normalfall nicht die Berechtigung hat, Aktionen auszuführen, welche durch das Handle ermöglicht werden. Das Handle selber bekommt auch eine ID, ist aber im Gegensatz zu den dazugehörigen "Objekten" nur von einem Prozess aus ansprechbar.

Ist das so ungefähr korrekt? (Zusammenfassen finde ich toll, da man sich dann noch mal Gedanken drüber macht und im Nachhinein überprüft werden kann, ob ich es wirklich verstanden habe )

Von Bummi habe ich bis zum ersten "Longword" alles verstanden glaube ich. Danach ist das alles irgendwie Bahnhof o.O

@Aphton
Das es Thread heißt, war mir eigentlich bewusst... ich hab erst gedacht, das wäre nur in der Überschrift falsch. Aber als ich dann den ersten post gesehen habe dachte ich nur "WTF! Was machst du da, Gehirn???". Wie dem auch sei, ich habe mich schon selber ausgelacht und ich hoffe sowas passiert mir nicht zu oft... aber es ist ja auch Freitag und noch früh und so.

BTW ist das da L in deinem Avatar? <3
  Mit Zitat antworten Zitat
terence14
(Gast)

n/a Beiträge
 
#6

AW: Handles und Treads

  Alt 25. Jan 2013, 13:08
...und dazu habe ich auch eine Frage

Manchmal ist es doch notwendig, daß man folgendes
in der MainUnit des Programmes definieren muß:
Delphi-Quellcode:

const WM_ICONTRAY = WM_USER + 1; {-warum +1-}

procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
Klar, es ist irgendeine Identifikationsnummer für
Windows Messages. Nun zur Frage.

Wovon hängt der Wert ( hier +1) ab, den ich hinzufügen muß?
Manchmal liest man in Programmbeispielen auch +99.
Das verwirrt mich doch ziemlich! Welche Fehler kann man
hier denn machen?

MfG,
terence
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.685 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Handles und Treads

  Alt 25. Jan 2013, 13:19
@Handles: Wenn man sich den Begriff einfach mal ins Deutsche übersetzt, kommt das dem Zweck schon sehr nahe: Griff! Ein Handle ist einfach ein "Anfasser" für System-Objekte, wobei am Handle selber zunächst nicht erkennbar ist, um was für ein Objekt es sich dahinter handelt. Es ist einfach nur eine systemweit eindeutige Nummer, bei denen Windows bei Verwendung diverser API-Funktionen dann weiss, auf was diese Funktion anzuwenden ist.

@Messages: Alle Messages ab WM_USER sind zur freien Verwendung. Es steht dem Entwickler völlig frei, was er zu WM_USER hinzu addiert.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Handles und Treads

  Alt 25. Jan 2013, 13:29
Wenn es sich um Handles um GDI-Ressourcen handelt. Auf diese darf nur im Thread darauf zugegriffen werden der es auch erzeugt hat.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Getox

Registriert seit: 28. Dez 2012
155 Beiträge
 
Delphi XE3 Professional
 
#9

AW: Handles und Treads

  Alt 25. Jan 2013, 13:44
Ich glaube wenn das einzige was mir zu "GDI-Ressourcen" einfällt das Wort "Tiberium" ist, sollte ich auch noch mal da schauen was das ist o.O
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#10

AW: Handles und Treads

  Alt 25. Jan 2013, 21:39
Zitat von Getox:
BTW ist das da L in deinem Avatar? <3
Jupp ^^

const WM_ICONTRAY = WM_USER + 1; {-warum +1-}
Was hier geschieht, ist, dass du eine Vereinbarung, ne Definition machst. Du sagst, WM_ICONTRAY hat genau "diesen Wert". Dieser Wert muss eindeutig sein. Alles unterhalb WM_USER (1024) ist bereits vergeben, deshalb nimmt man beliebige Werte drüber.
Bsp. die Ok sind:
Delphi-Quellcode:
const
  WM_MYMESSAGE1 = WM_USER + 1;
  WM_MYMESSAGE2 = WM_USER + 2;
Nicht OK:
Delphi-Quellcode:
const
  WM_MYMESSAGE1 = WM_USER + 1;
  WM_MYMESSAGE2 = WM_USER + 2;

  WM_MYOTHERMESSAGE = WM_USER + 1;
Man kann nämlich per SendMessage / PostMessage (auch) prozessübergreifend "Nachrichten" schicken. Der Empfänger kann nun zu jeder Nachricht "reagieren".
Bsp. die Message 1025 (WM_USER + 1 = WM_MYMESSAGE1) wird empfangen, er kuckt nach, ob es zu dieser Msg nen Event gibt. Ist er nicht eindeutig, kommts hier schon zu Problemen
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (25. Jan 2013 um 21:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz