In der Delphi-
RTL heißt es
TThread.ReturnValue
und ist aus unerfindlichen Gründen ein Integer aber...
Delphi-Quellcode:
program Project1;
uses
System.SysUtils,
System.Classes,
WinApi.Windows;
procedure p();
var
thread: TThread;
threadExitCode: DWORD;
begin
thread := TThread.CreateAnonymousThread(
procedure()
begin
TThread.SetReturnValue(42);
end
);
thread.FreeOnTerminate := False;
thread.Start();
thread.WaitFor();
Win32Check(
WinApi.Windows.GetExitCodeThread(thread.Handle, threadExitCode)
);
WriteLn('
Exit code: ', threadExitCode);
end;
begin
try
p();
except
on E:
Exception do
Writeln(E.ClassName, '
: ', E.
Message);
end;
ReadLn;
end.
Ah ok, vielen Dank für das Beispiel. Ich hatte bei mir einen Denkfehler drin.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
ExitCode: DWORD;
ThreadHandle: THandle;
begin
if TestThread <> NIL then
begin
ThreadHandle := TestThread.Handle;
TestThread.Terminate;
TestThread.WaitFor;
FreeAndNil(TestThread);
GetExitCodeThread(ThreadHandle, ExitCode);
end;
end;
Und zwar habe ich den GetExitCodeThread erst nach dem Thread.Free gemacht, da ich geglaubt hatte, dass GetExitCodeThread auch nach einem Thread.Free funktionieren würde. Somit gab es das Thread.Handle garnicht mehr und ExitCode war immer Null.
Wieder mal was gelernt. Vielen Dank!
lg,
jus