AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi TThread.Create erzeugt einen Stack Overflow?
Thema durchsuchen
Ansicht
Themen-Optionen

TThread.Create erzeugt einen Stack Overflow?

Ein Thema von glkgereon · begonnen am 2. Mär 2007 · letzter Beitrag vom 5. Mär 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: TThread.Create erzeugt einen Stack Overflow?

  Alt 3. Mär 2007, 21:26
hast du dir den schonmal den "CallStack" angeschaut? Wie sieht der aus wenn der Fehler kommt (Stack overflow)
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#12

Re: TThread.Create erzeugt einen Stack Overflow?

  Alt 3. Mär 2007, 21:33
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...)
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
mr2

Registriert seit: 3. Mai 2003
140 Beiträge
 
Delphi 2006 Enterprise
 
#13

Re: TThread.Create erzeugt einen Stack Overflow?

  Alt 3. Mär 2007, 21:42
Zitat von glkgereon:
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 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
"... we know, there are known knowns; there are things we know we know. We also know there are known unknowns; that is to say we know there are some things we don't know. But there are also unknown unknowns - the ones we don't know we don't know."
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#14

Re: TThread.Create erzeugt einen Stack Overflow?

  Alt 3. Mär 2007, 21:45
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;
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: TThread.Create erzeugt einen Stack Overflow?

  Alt 3. Mär 2007, 22:05
Moin Gereon,

FidTCP solltest Du im Thread allerdings per Synchronize verwenden.
Es ist ja eine Kompo des Hauptthreads.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#16

Re: TThread.Create erzeugt einen Stack Overflow?

  Alt 3. Mär 2007, 22:57
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?
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)
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#17

Re: TThread.Create erzeugt einen Stack Overflow?

  Alt 5. Mär 2007, 16:42
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:32 Uhr.
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