Dass es ohne warten nicht funktionieren würde ist klar, aber das tue ich ja in meinem Fall. Und was das Freigeben angeht, der Speicher auf dem Stack wird beim Verlassen der Funktion automatisch vom Betriebssystem aufgeräumt. Habe ich das so richtig verstanden?
@sirius: Stimmt, hier ist sie ja global, also auf dem Heap. Dann muss ich das noch mal umbauen.
So sollte es eigentlich sein:
Delphi-Quellcode:
function ThreadFunc(
tp: PThreadParams): Integer;
var
Number: Integer;
Text:
String;
s:
String;
begin
Number := PThreadParams(
tp)^.Number;
Text := PThreadParams(
tp)^.Text;
s := '
Zahl: ' + IntToStr(Number) + #13#10 + '
Text: ' + Text;
Result := MessageBox(0, PChar(s), '
Thread', MB_YESNO
or MB_ICONINFORMATION);
end;
procedure RunThread;
var
tp: TThreadParams;
Thread: THandle;
ThreadID: Cardinal;
ExitCode: Cardinal;
begin
tp.Number := 42;
tp.Text := '
Die Antwort.';
Thread := BeginThread(
nil, 0, @ThreadFunc, @
tp, 0, ThreadID);
WaitForSingleObject(Thread, INFINITE);
GetExitCodeThread(Thread, ExitCode);
case ExitCode
of
IDYES: Writeln('
Benutrzer hat "Ja" angeklickt.');
IDNO: Writeln('
Benutzer hat "Nein" angeklickt.');
end;
CloseHandle(Thread);
end;