AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Überschreiben von TThread.Terminate

Ein Thema von MatthiasR · begonnen am 7. Jul 2010 · letzter Beitrag vom 7. Jul 2010
Antwort Antwort
Seite 3 von 3     123   
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#21

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 11:17
Und wie geht das? Mit inherited?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#22

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 11:23
Der Breakpoint innerhalb TThread.Terminate ist immernoch durchgestrichen und die Zeile grün, statt rot.
dieses Terminate wird auch verwendet?
Was nicht einkompiliert ist (weil es z.B. nicht verwendet wird), das kann auch nicht im Debugger mit einem Haltepunkt versehn werden.

Sind denn in dieser Procedur die kleinen blauen Pünktchen zu sehn?
(oder überhaupt irgendwo in der ganzen Unit)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#23

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 11:25
Und wie geht das? Mit inherited?
ja, ein Beispiel aus obiger verlinkter Unit:
Delphi-Quellcode:
constructor TReadPipe.Create(Aread_stdout,Awrite_stdout:THandle);
begin
  inherited Create(false);
  FEvent:=TEvent.Create(nil,false,false,'');
  FSyncString:=TSyncString.Create;
  Fread_stdout:=Aread_stdout;
  Fwrite_stdout:=Awrite_stdout;
  freeonterminate:=true;
end;

destructor TReadPipe.Destroy;
begin
  FEvent.Free;
  FSyncString.Free;
  inherited;
end;

procedure TReadPipe.Execute;
var Buf:array[0..1023] of byte;
    bread:Cardinal;
    s:string;
begin
  repeat
    ReadFile(Fread_stdout, Buf, length(buf), bread, nil); //wait for input
    if terminated then exit;
    setlength(s,bread);
    move(buf[0],s[1],bread);
    FSyncstring.Add(s);
    FEvent.SetEvent;
  until terminated;
end;

procedure TReadPipe.Terminate;
const fin='fin';
var bwrite:Cardinal;
begin
  inherited;
  WriteFile(Fwrite_stdout,fin,length(fin),bwrite,nil);
end;
Es gibt da auch noch ein größeres Beispiel.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#24

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 11:36
Der Breakpoint innerhalb TThread.Terminate ist immernoch durchgestrichen und die Zeile grün, statt rot.
dieses Terminate wird auch verwendet?
Was nicht einkompiliert ist (weil es z.B. nicht verwendet wird), das kann auch nicht im Debugger mit einem Haltepunkt versehn werden.

Sind denn in dieser Procedur die kleinen blauen Pünktchen zu sehn?
(oder überhaupt irgendwo in der ganzen Unit)
Ja natürlich wird das TThread.Terminate ebenfalls verwendet, wie soll ich sonst die property Terminated setzen?

Und nein, in der ganzen Classes-Unit werden keine blauen Pünktchen angezeigt, auch wenn die Debug-DCUs aktiviert sind.

Und wie geht das? Mit inherited?
ja, ein Beispiel aus obiger verlinkter Unit
OK, hätte mich auch schwer gewundert, weil ich ja auch schon zigmal einen constructor Create (ebenfalls nicht virtual deklariert) auf diese Weise verdeckt habe und intern über inherited trotzdem aufrufen konnte. Dann klappte das in meinem Code-Schnipsel aus Beitrag 1 die ganze Zeit, nur hat es mich irritiert (und es irritiert mich weiterhin), dass ich in TThread.Terminate keinen Breakpoint setzen kann. Dann ist das also mein eigentliches Problem, trotz der nun aktivierten Debug-DCUs.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#25

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 12:08
Du hast nicht zufällig "build with runtime packages" an, oder?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#26

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 12:26
Du hast nicht zufällig "build with runtime packages" an, oder?
Doch, habe ich. Habe die Option nun mal ausgeschaltet, allerdings beschwert sich der Compiler dann in einer Unit des ImageEn-Komponentenpakets über folgendes:
Zitat:
[Fataler Fehler] Previews.pas(37): Unit IEMIO wurde mit einer unterschiedlichen Version von IOPreviews.TfIOPreviews compiliert
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.027 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#27

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 12:47
Ok, das ist nun ein Problem, was mit der Ursprungsfrage nix mehr zu tun hat.
Ich kann nur sagen: dass du nicht in die Classes.pas debuggen kannst, hat mit den Runtime Packages zu tun, die sind nämlich Release und keine Debug Builds. Es gibt wohl ne Möglichkeit, sich Debug Builds der Delphi eigenen Runtime Packages zu basteln, aber das ist recht kompliziert, wenn ich mich recht erinnere. Wenn du also dein Projekt ohne Packages kompilierst, und debug dcus anhakst, kannst du auch durch die ganzen rtl/vcl sourcen debuggen.

Wenn du also auf eine Variable von TMeinThread Terminate aufrufst wird mit Sicherheit über inherited die verdeckte Terminate Methode von TThread aufgerufen. Du darfst nur keine Variable vom Typ TThread haben, dann würde nur die von dort aufgerufen.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#28

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 14:24
Ja, das stimmt, das ist wieder ein anderes Problem und mein ursprüngliches wäre nun geklärt. Danke für die ausführliche Erklärung! Klar, wenn in den Runtime Packages keine Debug Symbole sind, und ich das Projekt aktuell OHNE Runtime Packages nicht compilieren kann, dann wird das schwierig mit dem Debuggen der Delphi-eigenen Klassen.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#29

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 14:56
@Stevie
debuggen in classes ...
wenn Du classes.pas zu debuggen in Dein Projektverzeichnis kopierst.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#30

AW: Überschreiben von TThread.Terminate

  Alt 7. Jul 2010, 15:09
@Stevie
debuggen in classes ...
wenn Du classes.pas zu debuggen in Dein Projektverzeichnis kopierst.
Dann hat er die Classes.pas doppelt im Code.
Einmal das Selbsteingebundene/Kopierte und dann verwenden die restlichen Delphi/VCL-Units dennoch die originale Classes.pas.

Heißt also, daß beim Debuggen in diesem Fall eher mit Problemem zu rechnen ist, da Einiges die Originale und Anderes die Kopie verwendet.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 15:28 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