Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mein Thread und die Classes.pas... (https://www.delphipraxis.net/32378-mein-thread-und-die-classes-pas.html)

Kedariodakon 22. Okt 2004 11:40


Mein Thread und die Classes.pas...
 
So ich habe follgendes Problem, ich rufe von außerhalb Destroy des Threads auf, obwohl er noch arbeitet (Mehr oder Weniger)...

Aber er wird net beendet, sondern er hängt in der Classes.pas im Wahrstem Sinne des Wortes in einer Endlosschleife fest...

Und zwar im Unterem Teil...
WaitResult ist immer 258... :wall:

Delphi-Quellcode:
function TThread.WaitFor: LongWord;
{$IFDEF MSWINDOWS}
var
  H: array[0..1] of THandle;
  WaitResult: Cardinal;
  Msg: TMsg;
begin
  H[0] := FHandle;
  if GetCurrentThreadID = MainThreadID then
  begin
    WaitResult := 0;
    H[1] := SyncEvent;
    repeat
      { This prevents a potential deadlock if the background thread
        does a SendMessage to the foreground thread }
      if WaitResult = WAIT_OBJECT_0 + 2 then
        PeekMessage(Msg, 0, 0, 0, PM_NOREMOVE);
      WaitResult := MsgWaitForMultipleObjects(2, H, False, 1000, QS_SENDMESSAGE);
      CheckThreadError(WaitResult <> WAIT_FAILED);
      if WaitResult = WAIT_OBJECT_0 + 1 then
        CheckSynchronize;
    until WaitResult = WAIT_OBJECT_0;
  end else WaitForSingleObject(H[0], INFINITE);
  CheckThreadError(GetExitCodeThread(H[0], Result));
end;
Tjo wie bekomm ich den da raus, damit er endlich vernichtet wird? :gruebel:

Bye

Edit:
Zitat:

Zitat von Classes.pas
Delphi-Quellcode:
      { This prevents a potential deadlock if the background thread
        does a SendMessage to the foreground thread }

:wiejetzt:

jim_raynor 22. Okt 2004 11:44

Re: Mein Thread und die Classes.pas...
 
Mach ein destructor im Thread. Dort setzt du ein merkmal. In der Thread Schleife (dort hast du doch hoffentlich eine Schleife) fragst du dieses Merkmal ab und springst dann aus der Schleife raus.

Kedariodakon 22. Okt 2004 11:49

Re: Mein Thread und die Classes.pas...
 
Alles schon vorhanden...

Delphi-Quellcode:
Procedure TReadThread.Execute;
Begin
   SetName;
   Try
      While Not Terminated Do Begin
         MyTIdTCPclient.ReadTimeout := 0;
         If Assigned( FOnRead ) Then FOnRead( MyTIdTCPclient, MyTIdTCPclient.CurrentReadBuffer );
      End;
   Except
      //Da Fehlt noch was ganz ganz Wichtiges, die Fehlerbehandlung!
   End;
End;
Problem ist, dass CurrentReadBuffer solange was macht bis was im Speicher ist...
Da das mein Main-Programm immer Frezzed hab ichs im Thread ausgelagert, aber nu will ich den Thread aber zerstören, aber es ist nix im Speicher, also hängt er an der stelle scheinbar....


Und nu? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:58 Uhr.

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