Also ich habe eine Thread-Funktion:
Delphi-Quellcode:
function SecondaryThread(p: Pointer): Integer;
var
Thread: THandle;
s: string;
begin
result := 0;
Thread := THandle(p);
SuspendThread(Thread);
s := 'Der primäre Thread [' + IntToStr(Thread) + '] wurde unterbrochen.'
+
#13#10;
s := s + 'Er reagier weder auf Eingaben noch hat er eine Ausgabe.' + #13#10;
s := s + 'Klicken sie OK, um zum primären Thread zurück zukehren ';
s := s + 'und den sekundären Thread zu beenden.';
Messagebox(hApp, pointer(s), 'Sekundärer Thread', MB_ICONWARNING);
ResumeThread(Thread);
CloseHandle(Thread);
EnableWindow(hApp, True);
end;
Diese soll den primären Thread des Prozesses anhalten. Als Parameter kann ich nur einen Pointer übergeben. Und es muß der Hnadle des primären Threads sein.
Ich habe das bis jetzt so probiert:
Delphi-Quellcode:
New(PrimaryThreadhandle);
DuplicateHandle(GetCurrentProcess(), GetCurrentThread(),
GetCurrentProcess(), PrimaryThreadHandle, THREAD_SUSPEND_RESUME,
False, DUPLICATE_SAME_ACCESS);
ThreadHandle := BeginThread(nil, 0, @SecondaryThread,
PrimaryThreadHandle, 0, ThreadID);
if ThreadHandle <> 0 then
begin
EnableWindow(hDlg, False);
Dispose(PrimaryThreadHandle);
CloseHandle(ThreadHandle);
end;
In der Messagebox sehe ich auch einen
Handle bzw. eine Zahl, nur scheint das nicht das
Handle des primären Threads des Prozesses zu sein, da der Thread nicht angehlaten wird.
PrimaryThreadHandle habe ich wie folgt deklariert:
PrimaryThreadHandle: PHandle;
Wie übergebe ich jetzt also den
Handle als Pointer?