Ich kann einem Thread Parameter entweder über den Heap oder über den Stack mitgeben. Übergebe ich sie über den Heap, muss ich Speicher reservieren und im Thread natürlich wieder freigeben.
Aber wie funktioniert das, wenn ich die Parameter über den Stack übergebe? Siehe dazu das Beispiel. Wer gibt da wann und wie den Speicher wieder frei?
Delphi-Quellcode:
type
TThreadParams =
packed record
Number: Integer;
Text:
String;
end;
PThreadParams = ^TThreadParams;
function IntToStr(Int: integer):
string;
begin
Str(Int, result);
end;
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;
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);
Readln;
end.