Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Thread freigeben, wenn er festklebt :) (https://www.delphipraxis.net/184505-thread-freigeben-wenn-er-festklebt.html)

Stevie 26. Sep 2017 10:20

AW: Thread freigeben, wenn er festklebt :)
 
Zitat:

Zitat von Larry Osterman
How many times does
it have to be said: Never
call TerminateThread.

Siehe https://blogs.msdn.microsoft.com/old...14-00/?p=91811

Dalai 26. Sep 2017 15:00

AW: Thread freigeben, wenn er festklebt :)
 
Zitat:

Zitat von 4dk2 (Beitrag 1382012)
aber
Delphi-Quellcode:
TerminateThread(FWorker.ThreadID,iThreadExitCode) = false

Weil du immer noch die Thread ID benutzt statt des Handles.

Generell stimmt ich aber zu: Priorität sollte haben, zu verhindern, dass der Thread hängt. Warum er das tut, kann natürlich keiner sagen außer dir selbst.

Grüße
Dalai

4dk2 28. Sep 2017 08:13

AW: Thread freigeben, wenn er festklebt :)
 
Danke für eure Hilfe, es Funktioniert jetzt.

Delphi-Quellcode:
      iThreadID:=FWorker.ThreadID;
      hThread:=OpenThread(THREAD_TERMINATE or THREAD_QUERY_INFORMATION ,false,iThreadID);
      if hThread<>0 then
      try

        System.SetLastError(ERROR_SUCCESS);
        iThreadExitCode:=0;
        if not GetExitCodeThread(hThread,iThreadExitCode) then
          sMsg:=SysErrorMessage(GetLastError);

        System.SetLastError(ERROR_SUCCESS);
        bOK:=TerminateThread(hThread,iThreadExitCode);
        if bOK then
          sMsg:='OK'
        else
        begin
          sMsg:=SysErrorMessage(GetLastError);
        end;
      finally
        CloseHandle(hThread);
      end;

Der schöne Günther 28. Sep 2017 08:19

AW: Thread freigeben, wenn er festklebt :)
 
PS: Ohne auf die Notwendigkeit von TerminateThread(..) einzugehen: Das ständige Zwischenspeichern des Rückgabewertes, SysErrorMessage usw. lässt sich vereinfachen: Schau dir mal den Aufruf
Delphi-Quellcode:
System.SysUtils.Win32Check(..)
an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz