thread id

08/02/2008 03:40 yesar#1
ich suche eine möglichkeit mit c/c++ an die threadid(s) eines prozesses zu kommen. es gibt zwar eine api welche über den windowhandle geht, allerdings bekomm ich ja nur einen thread zurück, bräucht aber alle.
gibts da ne "einfache" möglichkeit oder muss ich den umweg über CreateToolhelp32Snapshot gehen?
08/02/2008 20:48 MeUndercover#2
Wieso machst dus dan nicht mit ner Funktion -> Array/Vektor ?

Gruß MeUndercover
08/03/2008 14:45 yesar#3
Wenn ich halt mal die MSDN gescheit gelesen hätte, da is ein Beispiel ;)
Falls jemand noch auf der Suche nach der Lösung ist:
[Only registered and activated users can see links. Click Here To Register...]
08/03/2008 15:42 Term!nX#4
Wichtig ist halt, dass man als zweites Argument einen Pointer übergibt:

Code:
    DWORD pid;
    GetWindowThreadProcessId(hgw, &pid);
08/03/2008 18:07 link#5
In deinem Beispiel übergibst du eine simple Adresse, keinen Pointer.

Obwohl das Prinzip ja dasselbe ist, da, wenn man einen Pointer übergeben würde, man die Adresse auf einen Speicherblock hätte, was ja auf das gleiche hinausläuft, nämlich, dass sich auf dem Stack eine Adresse zu einer Variablen befindet, die binnen der Routine einen Wert erhalten soll.

Veranschaulichung [Übergabe eines Pointers, anstatt einer direkten Adresse mit Hilfe des Adressoperators]:
Quote:
DWORD pid, *p;
/*p wird als DWORD deklariert, damit der Compiler weiß, wieviele Bytes bei der Dereferenzierung benötigt werden, aber ein Pointer selber ist immer 4 Bytes groß*/
p = &pid
// *p würde den Pointer dereferenzieren und man erhält den Wert von 'pid'
// &p gibt nur die Adresse des Pointers, der auf eine andere Adresse zeigt, wieder
GetWindowThreadProcessId(hgw, p);