Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TThread.Create erzeugt einen Stack Overflow? (https://www.delphipraxis.net/87590-tthread-create-erzeugt-einen-stack-overflow.html)

SirThornberry 3. Mär 2007 21:26

Re: TThread.Create erzeugt einen Stack Overflow?
 
hast du dir den schonmal den "CallStack" angeschaut? Wie sieht der aus wenn der Fehler kommt (Stack overflow)

glkgereon 3. Mär 2007 21:33

Re: TThread.Create erzeugt einen Stack Overflow?
 
Zitat:

Zitat von SirThornberry
hast du dir den schonmal den "CallStack" angeschaut? Wie sieht der aus wenn der Fehler kommt (Stack overflow)

Zitat:

TChatClient.Connect('*wuppdi*',9020)
TForm_Main.Btn_ConnectClick(???)
:0044d8ce TControl.Click + $6A
:00450b8b TWinControl.WndProc + $20B
:00450cc4 DoControlMsg + $28
:00450b8b TWinControl.WndProc + $20B
:004234d6 StdWndProc + $16
:77e3158f ; G:\WINNT\system32\user32.dll
:77e2b7a9 ; G:\WINNT\system32\user32.dll
:77e2b811 user32.SendMessageW + 0x49
:77e28126 ; G:\WINNT\system32\user32.dll
:77e17ae2 user32.DefWindowProcA + 0xa8
:77e3158f ; G:\WINNT\system32\user32.dll
:77e2afa1 user32.VkKeyScanW + 0x5f
:77e17e2d user32.CallWindowProcA + 0x1b
:00450c70 TWinControl.DefaultHandler + $DC
:00450b8b TWinControl.WndProc + $20B
:004234d6 StdWndProc + $16
:77e3158f ; G:\WINNT\system32\user32.dll
:77e31dc9 ; G:\WINNT\system32\user32.dll
(Das ist alles.... Nun einmal F7 und Overflow...)

mr2 3. Mär 2007 21:42

Re: TThread.Create erzeugt einen Stack Overflow?
 
Zitat:

Zitat von glkgereon
Zitat:

Zitat von DGL-luke
Hat dein Thread keinen Konstruktor? bzw. wie sieht der aus?

nein, ich habe den von TThread nicht überschrieben.
Brauchte ich in dem Fall nicht.


Zitat:

Zitat von glkgereon
Aber jetzt kommt schon bei diesem Code eine AV:

Delphi-Quellcode:
  if FIdTCP.Connected then Exit;
  try
    Fidtcp.Connect(Host,Port);
Zitat:

In Projekt <abc> trat ein Problem mit folgender Meldung auf: 'access violation at 0x004061f0: write of address 0x00030060'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.

Du solltest FTCP auch irgendwo (am besten im Konstruktor :)) erzeugen, wenn es sich dabei um ein Objekt handelt, sonst bekommst Du zwangsläufig eine Zugriffsverletzung.

mr2

glkgereon 3. Mär 2007 21:45

Re: TThread.Create erzeugt einen Stack Overflow?
 
Zitat:

Zitat von mr2
Du solltest FTCP auch irgendwo (am besten im Konstruktor :)) erzeugen, wenn es sich dabei um ein Objekt handelt, sonst bekommst Du zwangsläufig eine Zugriffsverletzung.

mr2

*möp*
Delphi-Quellcode:
procedure TChatClient.Connect(Host: String; Port: Integer);
var CT: TConnectThread;
    T: Cardinal;
    TT: TThread;
begin
  if FIdTCP.Connected then Exit;
  try
    CT:=TConnectThread.Create(True);
    CT.FreeOnTerminate:=True;
    CT.TCP:=Fidtcp; // <-- !!!
    CT.Host:=Host;
    CT.Port:=Port;
    T:=GetTickCount+5000;
    CT.Resume;
    while (not CT.Terminated) do
    begin
      FOnSleep;
      if (T-GetTickCount<0) or (Fidtcp.Connected) then Break;
      Sleep(50);
    end;
    CT.Terminate;
    if not Fidtcp.Connected then raise EConnectException.Create('');
    FListeningThread.Resume;
  except
    raise EConnectException.Create('');
  end;
end;

Christian Seehase 3. Mär 2007 22:05

Re: TThread.Create erzeugt einen Stack Overflow?
 
Moin Gereon,

FidTCP solltest Du im Thread allerdings per Synchronize verwenden.
Es ist ja eine Kompo des Hauptthreads.

glkgereon 3. Mär 2007 22:57

Re: TThread.Create erzeugt einen Stack Overflow?
 
Zitat:

Zitat von Christian Seehase
Moin Gereon,

FidTCP solltest Du im Thread allerdings per Synchronize verwenden.
Es ist ja eine Kompo des Hauptthreads.

Wie würde das konkret aussehen?
so?
Delphi-Quellcode:
Synchronize(FTCP.Connect(FHost,FPort));
Edit:
So müsste es doch richtig sein, oder?
Delphi-Quellcode:
procedure TConnectThread.SyncConnect;
begin
  FTCP.Connect(FHost,FPort);
end;

procedure TConnectThread.Execute;
begin
  Priority:=tpLower;
  FConnected:=False;
  Synchronize(SyncConnect);
  FConnected:=True;
end;
(Stack Overflow bleibt)

glkgereon 5. Mär 2007 16:42

Re: TThread.Create erzeugt einen Stack Overflow?
 
Sooo, also einiges hat sich geklärt...

Zum einen habe ich eine AV-Quelle gefunden in meinem Sortiert-Einfügen für die ServerHistory.
Dann war das ganze eine Debugger-Exception...Naja, ich hab Delphi neuinstalliert und es scheint weg zu sein.

von daher ist mein Ursprungsproblem behoben...
Naja, das dieses Threads zumindest :???:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:27 Uhr.
Seite 2 von 2     12   

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