Forum: Programmieren allgemein
by Fridolin Walther,
28. Mai 2009
Stimmt, ist korrigiert. Dankeschön :). Hatte das nur schnell runtergeschrieben und wollte den Rückgabeparameter erst auch ganz weglassen. Da es noch einige andere Probleme gibt und mir auf die Schnelle kein Weg eingefallen ist, wie man den Rückgabewert schön ermitteln könnte ohne eine weitere Hilfsvariable. Werd das bei Gelegenheit wenn ich Zeit hab noch mal etwas schöner machen.
Forum: Programmieren allgemein
by Fridolin Walther,
28. Mai 2009
Falls es jemanden interessiert:
const
THREAD_SUSPEND_RESUME = $0002;
function OpenThread(dwDesiredHandle : DWORD; bInheritHandle : LongBool; dwThreadID : DWORD) : DWORD; stdcall; external 'kernel32.dll';
function ResumeOrSuspendProcess(PID : DWORD; Suspend : Boolean) : Boolean;
var
SnapshotHandle : THandle;
ThreadEntry : TThreadEntry32;
Forum: Programmieren allgemein
by Fridolin Walther,
28. Mai 2009
Benutz halt ansonsten folgende Definition:function OpenThread(dwDesiredHandle : DWORD; bInheritHandle : LongBool; dwThreadID : DWORD) : DWORD; stdcall; external 'kernel32.dll';
Forum: Programmieren allgemein
by Fridolin Walther,
28. Mai 2009
Ja, die macht auch nichts anderes als alle Threads eines Prozesses zu enumerieren und SuspendThread bzw. ResumeThread für jeden Thread aufzurufen.
Forum: Programmieren allgemein
by Fridolin Walther,
28. Mai 2009
In der Theorie gibts da sogar noch mehr Probleme. Timeouts laufen auch weiter während der Prozess suspended ist. Je nach Timeout der getriggert wird, gibts da durchaus lustige Effekte.
Wieso? Wenn ich alle Thread suspende (-> alle Suspend Counter incrementiere), darf ich danach ja auch wieder alle resumen (-> alle Suspend Counter decrementieren).
Oder aber man triggert irgendwelche...
Forum: Programmieren allgemein
by Fridolin Walther,
27. Mai 2009
Das muss nicht mal ein anderer Prozess sein. Du glaubst gar nicht wieviele Prozesse das Resume von sich aus schon nicht überleben. Insbesondere dann wenn die Anwendungen Multi Threading verwenden. Dadurch das Du die Thread Reihenfolge beim Suspenden und Resumen nicht so wirklich festlegen kannst, kommts da durchaus häufiger mal zu Crashes.
Forum: Programmieren allgemein
by Fridolin Walther,
27. Mai 2009
Nur damit das klar ist: So etwas wie einen "Main Thread" gibt es nicht. Du musst um einen Prozess zu pausieren alle in ihm befindlichen Threads pausieren (suspenden).