Einzelnen Beitrag anzeigen

jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#3

AW: ExitCode von GetExitCodeThread in TThread setzen?

  Alt 3. Aug 2019, 00:30
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
  Mit Zitat antworten Zitat